1.赋值运算符
=,把等号右边表达式的结果赋值给等号左边的变量或final修饰的常量。
【随堂练习】
1、交换两个变量的值(用两种方式实现)。
方案一:定义一个零时变量来实现
public class OperatorDemo {
public static void main(String[] args) {
int num1 = 3, num2 = 5;
// 方案一:定义一个零时变量来实现
int temp = num1;
num1 = num2;
num2 = temp;
// 交换之后:num1 = 5, num2 = 3
System.out.println("num1 = " + num1 + " num2 = " + num2);
}
}
该方式的优点:特别好理解,缺点:需要定义零时变量,浪费内存空间。
方案二:一加两减。
public class OperatorDemo {
public static void main(String[] args) {
int num1 = 3, num2 = 5;
// 方案二:一加两减。
num1 = num1 + num2; // num1 = 8
num2 = num1 - num2; // num2 = 3
num1 = num1 - num2; // num1 = 5
// 交换之后:num1 = 5, num2 = 3
System.out.println("num1 = " + num1 + " num2 = " + num2);
}
}
该方式的优点:无需定义零时变量,节约内存空间,缺点:不太好理解。
2.算数运算符
算数运算符可分为:一元运算符和二元运算符
二元运算符,需要两个操作数参与运算。
一元运算符,只需要一个操作数参与运算。
2.1一元运算符
只需要一个操作数的运算符称为一元运算符,如++,-- 等。
++ 自增运算符
如num++
和++num
,都等价于num = num + 1
num++
和++num
的区别:
++num
先自增,后参与运算num++
先参与运算,后自增
-- 自减运算符
如num--
和--num
,都等价于num = num - 1
num--
和--num
的区别
--num
先自减,后参加运算num--
先参与运算,后自减
【思考】
1、可以对常量进行递增或递减操作吗?例如:5++或++5。
【随堂练习】
1、int a = 3, b = 4; 求a++ / 3 + --b * 2 - a-- % 6 + b++ * 3 - ++b
的值。
【经典面试题】
1、int num = 5; num = num++;
请问代码执行后num的值为多少?
分析:很多学生以为num的结果为6,实际上num的结果为5,接下来我就给大家分析一下此题。
“num = num++;”底层操作
第一步:定义一个零时变量,用于保存num的值。
int temp = num; --> temp = 5;
第二步:执行num的自增操作,也就是执行num++操作
num = num + 1; --> num = 6;
--------------以上两步执行的是等号有边的操作-------------
--------------最后一步,执行的是赋值操作-------------
第三步:把零时变量的值赋值给等号左边的num。
num = temp; --> num = 5;
2.2二元运算符
二元运算符指的是需要两个操作数才能完成运算的运算符,例如:+,-,*,/,%。
+,加法运算,连接符操作,还可以表示正数。
-,减法运算,还可以表示负数。
*,乘法运算
/,除法运算
%,取模运算或取余运算,获得两个数相除的余数。
取模运算示例:
0 % 3,结果为:0 --> 强调,零模任何一个数,结果都为零。
1 % 3,结果为:1
2 % 3,结果为:2
3 % 3,结果为:0
4 % 3,结果为:1
取模运算的使用场合:判断m是否能被n整除:
如果m能被n整除,则m%n的结果为零。
如果m不能被n整除,则m%n的结果不为零。
【注意事项】
两个整数做除法运算,返回的结果肯定是一个整数。
两个数做除法运算,分母不允许为零,否则抛出算数异常。
【随堂练习】
1、获取整数987的百位数、十位数和个位数。
public class OperatorDemo {
public static void main(String[] args) {
// 2、获取整数987的百位数、十位数和个位数。
int num = 987;
// 个位数,7
int bit1 = num % 10;
System.out.println("个位数:" + bit1);
// 十位数,8
// 方案一:先获得98,然后再获得8
// int bit2 = num / 10 % 10;
// 方案二:先获得87,然后再获得8
int bit2 = num % 100 / 10;
System.out.println("十位数:" + bit2);
// 百位数,9
int bit3 = num / 100;
System.out.println("百位数:" + bit3);
}
}
3.扩展赋值运算符
扩展赋值运算符:是算术运算符和赋值运算符结合。
运算符 | 用法举例 | 等效的表达式 |
---|---|---|
+= | a += b | a = a+b |
-= | a -= b | a = a-b |
*= | a *= b | a = a*b |
/= | a /= b | a = a/b |
%= | a %= b | a = a%b |
【随堂练习】
1、获取三个学生的成绩,并计算三个学生成绩的平均分。
【常见面试题】
1、int num = 3; num *= 2 + 3;
请问num的结果为多少?
分析:很多同学认为num *= 2 + 3;
等效于num = num*2 + 3
,所以认为num的结果为9。
而实际上,num *= 2 + 3;
等效于num = num*(2 + 3)
,所以num正确的结果是15。
2、short num = 11; num = num + 1;
和short num = 11; num += 1;
哪一个正确呢?
分析:short num = 11; num = num + 1;
语法错误,因为num + 1
的结果为int类型。
short num = 11; num += 1;
语法正确,因为num += 1;
等效于num = (short)(num + 1);
。
3、int sum += 30;
请问这行语句语法是否正确???
分析:int sum += 30;
等效于int sum; sum += 30;
,num只声明未赋值,无法参与算数运算,所以该语句语法错误。
4.关系运算符
关系运算符用来进行比较运算,关系运算符的运算结果是boolean类型。条件成立,则返回true。条件不成立,则返回false。。
、 <、>=、<=、==、!=
==(相同):比较左右两边的数值是否相同。相同则返回true,否则返回false。
!=(不相同):比较左右两边的数值是否不相同。不相同则返回true,相同则返回false。
注意事项:
1、请问以下代码执行的结果是什么???
boolean flag = false;
if(flag = true) {
System.out.println("flag等于true"); // 此行语句输出
}
else {
System.out.println("flag等于false");
}
注意:在if的条件表达式中,”flag = true“做了赋值操作,而不是比较操作。
建议:常量放在”==“的左边,变量放在”==“的右边。
好处:如果“==”误写为“=”,那么问题就提前暴露在编译时,避免把问题暴露在运行时。
ps:如需最新的免费文档资料和教学视频,请添加QQ群(627407545)领取。