自增自减运算符(++、--)
测试代码:
public class Demo { public static void main(String[] args) { // a++先使用a的值再自增 int a = 1; System.out.println(a++); System.out.println(a); // ++b先自增再使用b的值 int b = 1; System.out.println(++b); System.out.println(b); } }
结果:
若a的类型为A,b的类型为B,若A>B,则a += b
等价于a += (A)b
;若A<B,则a += b
等价于a = (A)((B)a + b)
。其中A>B指的是数据类型A的范围比B大。
测试代码:
// A>B public class Demo { public static void main(String[] args) { double a = 2.8; int b = 100000; a += b; System.out.println(a); } }
// A<B public class Demo { public static void main(String[] args) { int a = 100000; double b = 2.8; a += b; System.out.println(a); } }
反编译后的代码:
// A>B public class Demo { public Demo() { } public static void main(String[] var0) { double var1 = 2.8D; int var3 = 100000; var1 += (double)var3; System.out.println(var1); } }
// A<B public class Demo { public Demo() { } public static void main(String[] var0) { int var1 = 100000; double var2 = 2.8D; var1 = (int)((double)var1 + var2); System.out.println(var1); } }
关系运算符的结果为boolean类型。
测试代码:
public class Demo { public static void main(String[] args) { int a = 10; boolean flag = a < 5 && a++ < 20; // 结果输出10而不是11,说明&&是短路的 System.out.println(a); } }
public class Demo { public static void main(String[] args) { int a = 10; boolean flag = a > 5 || a++ < 20; // 结果输出10而不是11,说明||是短路的 System.out.println(a); } }
public class Demo { public static void main(String[] args) { System.out.println(11 >> 1); // 5 System.out.println(-11 >> 1); // -6 System.out.println(11 << 1); // 22 System.out.println(-11 << 1); // -22 } }
A?B:C
:A为真,则执行B,否则执行C
public class Demo { public static void main(String[] args) { int a = 10; // 输出true System.out.println(a > 5 ? "true" : "false"); } }
从上到下依次降低
运算符 | 结合性 |
---|---|
* / % | 从左到右 |
+ - | 从左到右 |
>> >>> << | 从左到右 |
> >= < <= | 从左到右 |
== != | 从左到右 |
& | 从左到右 |
^ | 从左到右 |
| | 从左到右 |
&& | 从左到右 |
|| | 从左到右 |
?: | 从右到左 |
= += -= *= /= %= >>= <<= &= ^= |= | 从右到左 |