a = (a++) * (a++) 在 Java 中给出奇怪的结果 [已关闭]

我正在为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);

答案 1

在第一个变为4之后。所以你有.a++a3 * 4 = 12

(a在第 2 个之后变为 5,但会被丢弃,因为赋值会覆盖它)a++a =


答案 2

您的对账单:

a += (a++) * (a++);

等效于以下任何一项:

a = a*a + 2*a
a = a*(a+2)
a += a*(a+1)

请改用其中任何一个。


推荐