int i=1;i+=i+++++i; 然后 i = ?

首先看结果,然后再来分析原因

@Test
public void test(){
        int i = 1;
        i += i++ + ++i;
        Assert.assertEquals(5,  i);
    }

i += i++ + ++i
等价于 i = i + (i++) + (++i)
等价于 i = 1 + 1 + 3

所以结果是5

这样的原因有两个:

  • 在java中,操作数的计算顺序是从左到右
  • 运算符的确定是贪心的。即对于上面的多个 + 运算符,在确定一个操作数后,然后在确定下一个操作符的时候,会通过尽可能多结合的方式(贪心)来确定下一个运算符。

基于上面说的原因,所以该式子的结合方式为 i = i + (i++) + (++i)
然后还有另外一个问题,就是为什么++i最后的值会是3,这个涉及到i++和++i的区别

i++和++i的区别

其实无论 i++ 还是 ++i ,都是先+1,然后参与运算而不是 ++i 先加1,然后运算,而i++ 先运算后加1。
只不过 i++ 是先将i的赋值给一个临时变量,然后用那个临时变量替换掉 i++ ,然后将 i 的值+1

通过 i++ 和 ++i 的区别就能解释同为什么上面那个式子的i的值是3

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 虽然考研初试27号就结束了,现在已经过去了三十多天,但是看了看我只看了七八十页的计算机网络,感觉再浪下去要把自己腿...
    进击的苹果阅读 3,604评论 0 1
  • 01.01_计算机基础知识(计算机概述)(了解) A:什么是计算机?计算机在生活中的应用举例计算机(Compute...
    冰川_阅读 2,087评论 0 1
  • 注释 1、单选注释:符号是:// 2、块注释: 符号是: /* */ 可以跨多行 3、javadoc注释: 符号...
    蔡大爷的小甜心阅读 2,981评论 0 1
  • 基础 .NET概述 参考:http://www.cnblogs.com/yplong/p/3279934.html...
    donite阅读 5,557评论 0 8
  • 概要 64学时 3.5学分 章节安排 电子商务网站概况 HTML5+CSS3 JavaScript Node 电子...
    阿啊阿吖丁阅读 13,102评论 0 3