今天还真是奇怪了呢 这么多人问这个问题这里是一个别人的答案,楼主看看吧:这涉及到运算的优先问题。 i++的运算过程是先将i的值附给i++这个实体,然后在对i进行+1运算。 这时的i=1,i++这个实体等于0。然后将i++的值附给i i就等于0了。另一个:关于这一点以前讨论过的。 i = 0; i = i++; 在java里面,执行后i=0; 在c里面,执行后i=1. 这也算是java与c的实现方式上的一点不同之处吧。 原因: java的实现方法: i = i++; 等价于: tmp = i; i = i + 1; i = tmp; c的实现方法: i = i++; 等价于: tmp = i; i = tmp; i = i + 1; 差别在于:java先++, 然后给左边赋值, 而c先给左边赋值,再++
估计这个例子会有所帮助:class test { public static void main(String[] args) { int i = 0; int j; j = i++; System.out.println(j); System.out.println(i);
} }
我也曾想过自增的过程哪里去了 不过看了我列出的第二个回答(如果那没错的话) 就可以理解了 i = i++; 等价于: tmp = i; i = i + 1; i = tmp;自增的过程其实是被 i = tmp 给覆盖掉了 换个变量名可能好理解些: j = i++; 等价于: tmp = i; i = i + 1; j = tmp;究竟是不是这样,我不敢肯定
to gcq(gcq), 为什么说无意义呢?
少白头兄, i=i++; 是先赋值,后自增呀,你的等价语句tmp = i; i = i + 1; i = tmp; 顺序不对呀。
这么多人问这个问题这里是一个别人的答案,楼主看看吧:这涉及到运算的优先问题。
i++的运算过程是先将i的值附给i++这个实体,然后在对i进行+1运算。
这时的i=1,i++这个实体等于0。然后将i++的值附给i
i就等于0了。另一个:关于这一点以前讨论过的。
i = 0;
i = i++;
在java里面,执行后i=0; 在c里面,执行后i=1.
这也算是java与c的实现方式上的一点不同之处吧。
原因:
java的实现方法:
i = i++; 等价于: tmp = i; i = i + 1; i = tmp;
c的实现方法:
i = i++; 等价于: tmp = i; i = tmp; i = i + 1;
差别在于:java先++, 然后给左边赋值, 而c先给左边赋值,再++
{
public static void main(String[] args)
{
int i = 0;
int j;
j = i++;
System.out.println(j);
System.out.println(i);
}
}
不过看了我列出的第二个回答(如果那没错的话)
就可以理解了
i = i++; 等价于: tmp = i; i = i + 1; i = tmp;自增的过程其实是被 i = tmp 给覆盖掉了
换个变量名可能好理解些:
j = i++; 等价于: tmp = i; i = i + 1; j = tmp;究竟是不是这样,我不敢肯定
为什么说无意义呢?
i=i++; 是先赋值,后自增呀,你的等价语句tmp = i; i = i + 1; i = tmp;
顺序不对呀。
其次,那个答案不是我得出的,我只是认为它能解释i=0的现象而已
我也说了,是否正确,我也不敢肯定你说的“i=i++; 是先赋值,后自增呀”能肯定么?
依据何在?