int i =1;
i =++i;// 规则使用临时变量: (1) i = i + 1; (2) temp = i; (3) i = temp;System.out.println(i);// 2
面试题二
int i =1;// i -> 1
i = i++;// 规则使用临时变量: (1) temp = i; (2) i = i + 1; (3) i = temp;System.out.println(i);// 1
二、赋值运算符
注意是从右往左运算,把某个值赋给变量
类型
= : 赋值运算符,将右边的值赋给左边的变量
+= : 加法赋值运算符,将右边的值加到左边的变量上
-= : 减法赋值运算符,将右边的值从左边的变量中减去
*= : 乘法赋值运算符,将右边的值与左边的变量相乘
/= : 除法赋值运算符,将左边的变量除以右边的值
%= : 取余赋值运算符,将左边的变量对右边的值取余并赋值
注意:符合赋值运算符会进行类型转换
byte b = 2 ; b += 3 ; b++
底层实际是 b =(byte)(b+3)
如果写成 b=b+3 必然报错,int 类型不可以赋值给 byte 类型
三、关系运算符
关系运算符的结果都是 boolean 型,也就是要么是 true,要么是 false
运算符
计算
范例
结果
==
相等于
8 == 7
false
!=
不等于
8 != 7
true
<
小于
8 < 7
false
>
大于
8 > 7
true
<=
小于等于
8 <= 7
false
>=
大于等于
8 >= 7
true
instanceof
检查是否是类的对象
“hsp” instanceof String
true
四、逻辑运算符
类型
逻辑与
a & b
a && b
逻辑或
a | b
a || b
!a:逻辑非
a ^ b:逻辑异或
使用规则
a & b: 逻辑与:当 a 和 b 同时为 true,则结果为 true,否则为 false
a && b: 逻辑与:&& 短路运算:当 a 和 b 同时为 true,则结果为 true,否则为 false
a | b: 逻辑或:当 a 和 b, 有一个为 true,则结果为 true,否则为 false
a || b: 逻辑或:|| 短路运算:当 a 和 b, 有一个为 true,则结果为 true,否则为 false
!a: 取反:或者非运算。当 a 为 true,则结果为 false,当 a 为 false,则结果为 true
a ^ b: 逻辑异或:当 a 和 b 不同时,则结果为 true,否则为 false
区别|| 和 | ; && 和 &
&& 短路与:如果第一个条件为 false,则第二个条件不会判断,最终结果为 false,效率高。
& 逻辑与:不管第一个条件是否为 false,第二个条件都要判断,效率低。
|| 短路或:如果第一个条件为 true,则第二个条件不会判断,最终结果为 true,效率高。
| 逻辑或:不管第一个条件是否为 true,第二个条件都要判断,效率低。
总结
短路在条件成立时不会继续判断后面的条件
逻辑非,逻辑与在条件成立时会继续判断后面的条件
& 和 && 的代码示例
publicclassHello{// 编写一个main方法publicstaticvoidmain(String[] args){// && 短路与和 & 案例演示int age =50;// 使用 && 短路与if(age >20&& age <90){System.out.println("ok100");}// 使用 & 逻辑与if(age >20& age <90){System.out.println("ok200");}// 区别int a =4;int b =9;// 对于 && 短路与而言,如果第一个条件为 false, 后面的条件不再判断// 对于 & 逻辑与而言,如果第一个条件为 false, 后面的条件仍然会判断if(a <1&++b <50){System.out.println("ok300");}System.out.println("a="+ a +" b="+ b);// 输出 a=4 b=10}}
| 和 ||的代码示例
publicclassLogicOperator02{// 编写一个main方法publicstaticvoidmain(String[] args){// || 短路或和 | 逻辑或案例演示// || 规则: 两个条件中只要有一个成立,结果为 true,否则为 false// | 规则: 两个条件中只要有一个成立,结果为 true,否则为 falseint age =50;// 使用 || 短路或if(age >20|| age <30){System.out.println("ok100");}// 使用 | 逻辑或if(age >20| age <30){System.out.println("ok200");}// 看看区别// (1) || 短路或:如果第一个条件为 true,则第二个条件不会判断,最终结果为 true,效率高// (2) | 逻辑或:不管第一个条件是否为 true,第二个条件都要判断,效率低int a =4;int b =9;// 使用 || 短路或,如果条件满足,第一个条件为 trueif(a >1||++b >4){// 可以换成 | 来测试System.out.println("ok300");}// 输出 a 和 b 的值System.out.println("a="+ a +" b="+ b);// 4 10}}
五、三元运算符
使用方法示例:int res=a > b ? a++ : --b;
解释:如果条件成立,执行结果 a,如果条件不成立,执行结果 b
本质是 if - else 结构
代码示例
if(a > b){
res = a;}else{
res = b;}
注意:数据类型转换问题
代码示例
publicclassTernaryOperatorDetail{// 编写一个main方法publicstaticvoidmain(String[] args){// 表达式1和表达式2要为可以赋给接收变量的类型// (或可以自动转换/或者强制转换)int a =3;int b =8;// 使用三元运算符进行赋值int c = a > b ?(int)1.1:(int)3.4;// 强制转换成 int 类型System.out.println("c = "+ c);// 输出 c 的值double d = a > b ? a : b +3;// 可以的,满足 int -> double 自动类型转换System.out.println("d = "+ d);// 输出 d 的值}}