关于i++的一个小问题!
public class Testi
{
public static void main(String [] args)
{
int i=0;
i=i++;
System.out.println(i);
}
}
为什么输出结果是0而不是1呢?一直搞不明白!
问题点数:10、回复次数:7Top
1 楼jFresH_MaN(十一月的萧邦-夜曲)回复于 2005-04-01 21:44:12 得分 5
http://community.csdn.net/Expert/topic/3885/3885309.xml?temp=.9122278Top
2 楼csxiabin(里予亦虫)回复于 2005-04-01 21:44:50 得分 1
i++是先确定i的值再对i进行操作,后增量则相反,换成++i就是1了。这是我的理解,我也是才学。Top
3 楼dick66(狒狒)回复于 2005-04-02 10:51:00 得分 1
C++ 的命名 本身就是个错误!! 应该叫++C!!Top
4 楼xiangqianchong(向前冲)回复于 2005-04-02 10:55:36 得分 1
前序递增/前序递减 :先进行运算,后指派其值
后续递增/后续递减 :先指派其值,后进行运算
i=i++; 先将 0 指派给 i,所以为0
int i=0;
int b=0;
b=i++;
System.out.println(b);
System.out.println(i);
结果:
0
1
Top
5 楼tanzheng617(追梦人)回复于 2005-04-02 10:57:31 得分 1
在java中运算符的运算规则你可以参考一些书籍!
i++与++i是有很大的区别的!
i=++i; java是先对i进行+1运算,然后再把值赋给i
i=i++; java是先把i的值赋给了i,然后再进行i+1运算,所以你那样 i 肯定还是 0 了!Top
6 楼pzysoft(风尘雨路)回复于 2005-04-02 13:11:48 得分 1
楼上正解Top
7 楼Banned(bannedlqd@gmail.com)回复于 2005-04-02 15:20:42 得分 0
参考第二版的Java语言规范第14,15章有如下结论:
程序的运行基本上是语句执行的过程。
有一种语句叫表达式语句,表达式语句通过评估
表达式的值得以执行。
有一种表达式叫简单赋值表达式。
其结构如下:
left-hand = righ-hand
简单赋值表达式的评估步骤如下:
1 对left-hand评估以确定一个变量。
2 对right-hand评估以得到一个值。
3 将步骤2得到的值保存进步骤1所确定的变量中。
简单赋值表达式的值即是 赋值以后,left-hand所确定的变量的值。
有一种表达式叫后增表达式。
其结构为:
operand ++
后增表达式的评估步骤如下:
1 对operand评估以确定一个变量。
2 对步骤1中的变量进行增1操作。
后增表达式的值是 没有增1操作前operand所确定的变量的值。
回过来分析(i的初始值为0)
i=i++
i=i++ 是简单赋值表达式,所以其评估过程是
1 确定变量i
2 评估i++
2.1 确定变量i
2.2 i增1,这时i的值为1
3 i++表达式的值是0,于是i的值被赋为0
如上分析,最后i的值为0。
Top




