浅析i=i++问题(转)

关于i=i++的问题解析:
编写一个小程序,主要使用了后缀的++运算符号(前缀与此道理相似),程序内容如下:
package org.ly;
public class IncrementDemo {
                   public static void main(String[] args) {
                                     int i = 0;
                                     i = i++;
                                     System.out.println(i);
                                     i = i+++i+++i++;
                                     System.out.println(i);
                   }
}
打印的结果为03.
在分析结果之前首先应该知道的是前缀++和后缀++操作符的相同点和不同点:
相同点:执行完操作后,变量的值都增加1
不同点:作为一个表达式,expr++的值为增加前的值,++expr的值为增加后的值,下面的例子是Sun Java Tutorial提供的示例及结果:
class PrePostDemo {
     public static void main(String[] args){
          int i = 3;
                    i++;
                    System.out.println(i);            // "4"
                     ++i;                                               
                    System.out.println(i);            // "5"
                    System.out.println(++i);       // "6"
                    System.out.println(i++);       // "6"
                    System.out.println(i);            // "7"
     }
}

下面解析一下上面的程序:
首先初始状态

style="FONT-SIZE: 10pt">i=0
表达式i++的值也为0,执行完i++操作后,i的值为1
将i++表达式的值(0)再重新赋值给i,此时i的值为0。这就是第一个结果为0的原因。
{换位思考:
可以将程序等价的替换为
int i=0;
int j=i++;
System.out.println(i);                 //1
System.out.println(j);                 //0
i=j;
System.out.println(i);                 //0
}
因为”=”的优先级低于++运算符,所以先执行++运算,执行的结果为i=1,i++这个表达式的结果为0,此时左侧的i=1,然后再执行”=”运算,即赋值运算,将0重新赋值给i,最终的结果为i=0。
 
至于第二个结果,笔者有意将加号连在一起写,如果使用Eclipse或者其他具有排版功能的IDE,可以发现实际的表达式是按如下方式书写的:
i = i++ + i++ + i++;
这是由于后缀++运算符的优先级高于前缀++运算符的优先级。
同时由于”+”运算符的优先级高于”=”,所以先计算右侧的表达式的值,再进行赋值运算(或者记住赋值运算是右优先级的)。
i++=0,i=1
i++=1,i=2
i++=2,i=3
所以i=0+1+2=3。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值