首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >java复合赋值算子和赋值算子

java复合赋值算子和赋值算子
EN

Stack Overflow用户
提问于 2011-09-13 21:38:55
回答 3查看 1.9K关注 0票数 3

在java中,我理解复合赋值运算符和赋值运算符有一些问题。有人能向我解释一下这两个运算符到底是如何工作的吗?(在某些地方,我找到了一个非常好的示例代码,使用临时变量来解释工作,但遗憾的是,我已经失去了它。)非常感谢您的优待。下面是它们的小示例代码(我已经知道前缀和后缀操作符之间的区别):

代码语言:javascript
复制
       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?
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-09-13 21:46:56

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

发表评论意见:

代码语言:javascript
复制
   int k = 12;
   k += k++;   
   System.out.println(k);  // 24

k++的意思是在使用了值之后增加,所以这与编码k = 12 + 12相同

代码语言:javascript
复制
   k = 12;
   k += ++k; 
   System.out.println(k); // 25

++k是指在使用值之前的增量,因此这与编码k = 12 + 13相同

代码语言:javascript
复制
   k = 12;
   k = k + k++; 
   System.out.println(k); // 24

k++的意思是在使用了值之后增加,所以这与编码k = 12 + 12相同

代码语言:javascript
复制
   k = 12;
   k = k++ + k; 
   System.out.println(k); // 25

k++的意思是在使用了值之后增加,所以这与编码k = 12 + 13相同

代码语言:javascript
复制
   k = 12;
   k = k + ++k; 
   System.out.println(k); // 25

++k是指在使用值之前的增量,因此这与编码k = 12 + 13相同

代码语言:javascript
复制
   k = 12;
   k = ++k + k; 
   System.out.println(k); // 26

++k的意思是在使用该值之前增加,然后再使用该值,因此这与编码k = 13 + 13相同。

票数 6
EN

Stack Overflow用户

发布于 2014-06-13 15:41:56

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

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)。

票数 1
EN

Stack Overflow用户

发布于 2011-09-19 09:41:26

从这里开始一个小小的完成:http://www.coderanch.com/how-to/java/PostIncrementOperatorAndAssignment

让我们仔细看看"i = i++;“行是做什么的:

"i++“被评估。"i++“的值是增量发生前的i值。作为"i++“评估的一部分,我将增加一个。现在我的值为1;赋值被执行。我被赋予"i++“的值,这是增量之前的i值,即0。也就是说,"i = i++“大致翻译为

代码语言:javascript
复制
int oldValue = i; 
i = i + 1;
i = oldValue; 

换句话说,人们普遍错误地认为增量是最后发生的。在计算表达式时立即执行增量,并记住增量之前的值,以便以后在同一语句中使用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7408877

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档