返回

深入剖析 Java 中的运算符:i++、++i、||、|、&&、& 的奥秘

后端

i++ 与 ++i 的区别

i++ 和 ++i 都是 Java 中的递增运算符,它们都将变量的值增加 1。但是,它们在执行顺序上存在着细微的差别。

  • i++: 先将 i 的值放在表达式中运算,然后再将 i 的值增加 1。
  • ++i: 先将 i 的值增加 1,然后再将 i 的值放在表达式中运算。

举个例子,我们有以下代码:

int i = 10;
int j = i++;
int k = ++i;

执行完这段代码后,i 的值变为 12,j 的值变为 10,k 的值变为 11。这是因为 j = i++ 先将 i 的值 10 放入 j 中,然后再将 i 的值增加 1,而 k = ++i 先将 i 的值增加 1,然后再将 i 的值 11 放入 k 中。

|| 和 | 的区别

|| 和 | 都是 Java 中的逻辑或运算符,它们都返回两个操作数中的任何一个为 true 的结果。但是,它们在求值顺序上存在着差异。

  • ||: 从左到右求值,如果遇到第一个为 true 的操作数,则直接返回 true,而不计算后面的操作数。
  • |: 从左到右求值,无论是否遇到 true 的操作数,都会计算所有操作数。

举个例子,我们有以下代码:

boolean a = true;
boolean b = false;
boolean c = a || b;
boolean d = a | b;

执行完这段代码后,c 的值为 true,d 的值为 true。这是因为 || 从左到右求值,遇到第一个为 true 的操作数 a 后,直接返回 true,而不计算后面的操作数 b。而 | 从左到右求值,无论是否遇到 true 的操作数,都会计算所有操作数,因此 d 的值为 true。

&& 和 & 的区别

&& 和 & 都是 Java 中的逻辑与运算符,它们都返回两个操作数都为 true 的结果。但是,它们在求值顺序上存在着差异。

  • &&: 从左到右求值,如果遇到第一个为 false 的操作数,则直接返回 false,而不计算后面的操作数。
  • &: 从左到右求值,无论是否遇到 false 的操作数,都会计算所有操作数。

举个例子,我们有以下代码:

boolean a = true;
boolean b = false;
boolean c = a && b;
boolean d = a & b;

执行完这段代码后,c 的值为 false,d 的值为 false。这是因为 && 从左到右求值,遇到第一个为 false 的操作数 b 后,直接返回 false,而不计算后面的操作数 a。而 & 从左到右求值,无论是否遇到 false 的操作数,都会计算所有操作数,因此 d 的值为 false。

运算符优先级

Java 中的运算符具有不同的优先级,优先级高的运算符先执行,优先级低的运算符后执行。运算符优先级表如下:

优先级 运算符
1 ()
2 []
3 .
4 ++, --
5 +, -
6 *, /, %
7 +, -
8 ==, !=
9 <, >, <=, >=
10 &, ^
11
12 &&
13

运算符结合性

Java 中的运算符具有不同的结合性,结合性决定了当有多个相同优先级的运算符时,从哪个方向开始执行运算。运算符结合性表如下:

结合性 运算符
从左到右 (), [], ++, --, +, -, *, /, %, ==, !=, <, >, <=, >=, &, ^,
从右到左

运算符重载

Java 允许对运算符进行重载,这意味着我们可以为不同的数据类型定义不同的运算符操作。例如,我们可以为自定义的 Complex 类定义 + 运算符,实现两个 Complex 对象的相加。

结语

本文详细探讨了 Java 中的运算符 i++、++i、||、|、&& 和 & 的奥秘,帮助读者深入理解这些运算符的用法和区别。同时,本文还介绍了运算符优先级和运算符结合性的概念,以及运算符重载的用法。希望本文能够帮助读者更好地掌握 Java 中的运算符。