我正在准备 OCPJP 考试,因此必须了解 Java 的每一个细节。这包括前缀和后缀增量运算符应用于变量的顺序。以下代码给出了奇怪的结果:
int a = 3;
a = (a++) * (a++);
System.out.println(a); // 12
答案难道不应该是11吗?或者可能是13?但绝不是12!
接下来的问题:
以下代码的结果是什么?
int a = 3;
a += (a++) * (a++);
System.out.println(a);
我正在准备 OCPJP 考试,因此必须了解 Java 的每一个细节。这包括前缀和后缀增量运算符应用于变量的顺序。以下代码给出了奇怪的结果:
int a = 3;
a = (a++) * (a++);
System.out.println(a); // 12
答案难道不应该是11吗?或者可能是13?但绝不是12!
接下来的问题:
以下代码的结果是什么?
int a = 3;
a += (a++) * (a++);
System.out.println(a);
现在是12点。 表达式从左侧开始计算。所以它执行以下操作:
a = (3++) * (4++);
第一部分(3++)被评估后,a变成了4,因此在下一部分中,它执行a = 3 * 4 = 12。请注意,最后的后增量(4++)被执行但没有影响,因为此时a已经被赋值为12。
示例1
int a = 3;
a = (++a) * (a++);
System.out.println(a); // 16
示例2
int a = 3;
a = (++a) * (++a);
System.out.println(a); // 20
只是为了确保在哪里放置++
表达式,该表达式根据位置更改值。
a = 3 * (3 + 1) = 3 * 4 = 12
前缀和后缀自增运算符的优先级高于乘法运算符。因此,该表达式被计算为3*4。
a = 3 (->4) * 4 (->5) // = 3*4 = 12
。 - Smamatti