运算符
常见的运算符如下所示:
其中,逻辑运算符:
//举例逻辑与&
public class java01 {
public static void main(String[] args) {
int a = 99;
int b = 100;
System.out.println(a > b & a > b++);
System.out.println(b);
}
}
结果:false
101
以上程序的运行结果是101,说明b++已经执行了。
对于逻辑与&来说,无论左边表达式是true还是false,右边表达式一定会执行。
-------------------------------------------------
//举例短路与&&
public class java01 {
public static void main(String[] args) {
int k = 99;
int f = 100;
System.out.println(k > f && k > f++);
System.out.println(f);
}
}
结果:false
100
测试得出f++并没有执行,因为左边表达式(k > f)为false,右边表达式就不再执行了,短路现象。
对于短路与&&来说,左边表达式为false,就会发生短路,右边表达式不再执行。
--------------------------------
//举例逻辑或|
public class java01 {
public static void main(String[] args) {
int a = 5;
System.out.println(a > 2 | (a=a+2)>5);
System.out.println("a="+a);
}
}
结果:true
a=7
左边表达式(a>2)为true时,右边表达式也会执行。
对于逻辑或|来说,无论左边表达式是true还是false,右边表达式一定会执行。
-----------------------------------
//举例短路或||
public class java01 {
public static void main(String[] args) {
int b = 5;
System.out.println(b > 2 || (b=b+2)>5);
System.out.println("b="+b);
}
}
结果:true
b=5
测试得出b=b+2并没有执行,因为左边表达式(b > 2)为true,右边表达式就不再执行了,短路现象。
对于短路或||来说,左边表达式为false,就会发生短路,右边表达式不再执行。
扩展类的赋值运算符:(+=、-=、*=、/=、%=)
举例:x += 1 和x = x + 1的区别
byte b = 10;
b = b+1;//编译报错
编译没有通过的原因:b 是byte类型,1 是int类型,根据类型转换规则得知:
byte和int混合运算最后结果是int类型,int类型的值无法直接赋值给byte类型的变量b,所以编译报错。
继续测试:
byte b = 10;
b += 1;//编译运行成功,结果b=11
实际上java对于扩展类的赋值运算符进行了特殊的处理,所有的扩展赋值运算符,最终都不会改变运算的结果类型,
假设前面的变量是byte类型,那么后面的表达式运算之后的结果还是byte 类型。
所以实际上b += 1等同于:byte b = (byte)(b+1);