繁体   English   中英

java复合赋值运算符和赋值运算符

[英]java compound assignment operator and assignment operator

我在java中理解复合赋值运算符和赋值运算符时遇到了一些问题。 有人可以向我解释这两个运营商如何运作的吗? (Somwhere我发现了一个非常好的示例代码,使用临时变量来解释工作,但遗憾的是我已经失去了它。)非常感谢你的优势。 这是我的小例子代码(我已经知道前缀和后缀运算符之间的区别):

       int k = 12;
       k += k++;   
       System.out.println(k);  // 24 -- why not (12+12)++ == 25?

       k = 12;
       k += ++k; 
       System.out.println(k); // 25 -- why not (1+12)+(1+12) == 26?               

       k = 12;
       k = k + k++; 
       System.out.println(k); // 24 -- why not 25? (12+12)++?

       k = 12;
       k = k++ + k; 
       System.out.println(k); // 25 -- why not 24 like the previous one?

       k = 12;
       k = k + ++k; 
       System.out.println(k); // 25 -- OK 12+(1+12)

       k = 12;
       k = ++k + k; 
       System.out.println(k); // 26 -- why?

请注意,在所有情况下,对k的赋值都会覆盖右侧可能发生的任何增量。

将评论放在一行:

   int k = 12;
   k += k++;   
   System.out.println(k);  // 24

k++表示在使用该值递增,因此这与编码k = 12 + 12

   k = 12;
   k += ++k; 
   System.out.println(k); // 25

++k表示使用该值之前递增,因此这与编码k = 12 + 13

   k = 12;
   k = k + k++; 
   System.out.println(k); // 24

k++表示在使用该值递增,因此这与编码k = 12 + 12

   k = 12;
   k = k++ + k; 
   System.out.println(k); // 25

k++表示在使用该值递增,因此这与编码k = 12 + 13

   k = 12;
   k = k + ++k; 
   System.out.println(k); // 25

++k表示使用该值之前递增,因此这与编码k = 12 + 13

   k = 12;
   k = ++k + k; 
   System.out.println(k); // 26

++k表示使用该值之前递增,然后再次使用该值,因此这与编码k = 13 + 13

以下是第一种情况的详细解释:

int k = 12; k += k++; System.out.println(k);

k += k++; 相当于: k = k + (k++);

k + (k++); 从左到右进行评估。
第一个k的值为12. k++被评估为k的原始值(即12); k后来递增。

其他帖子很好地解释了其他案例。


但这是一个有趣的案例,显示从左到右的评估和右侧的后增量:

int k = 12; k = k + k++ + k; System.out.println(k);

k + (k++) + k; 从左到右进行评估。
第一个k的值为12。
第二个k: k++被评估为k++的原始值(即12); k后来递增。
第三个k:现在k的增量值为13(因为它在第二个k之后)。
总结果为37(即12 + 12 + 13)。

从这里稍作完成: http//www.coderanch.com/how-to/java/PostIncrementOperatorAndAssignment

让我们仔细看看“i = i ++”这一行是什么。 作用:

评估“i ++”。 “i ++”的值是增量发生之前的i值。 作为评估“i ++”的一部分,i增加1。 现在我的值为1; 分配已执行。 我被赋予“i ++”的值,这是增量前的i的值 - 即0。即,“i = i ++”粗略地转换为

int oldValue = i; 
i = i + 1;
i = oldValue; 

换句话说,一种常见的误解是增量最后发生。 在计算表达式时立即执行增量,并记住增量之前的值以供将来在同一语句中使用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM