[code=Java][/public class Text2 {
public static void main(String[] args) {
int i = 0 ;
for (int j = 0; j < 100; j++){
i = i++;
}
System.out.println(i);
}
}
]
public static void main(String[] args) {
int i = 0 ;
for (int j = 0; j < 100; j++){
i = i++;
}
System.out.println(i);
}
}
]
不管你执行多少次i=i++,i都是0
因为:
先看等式右边,i++,这个时候,i还是0,下次使用i的时候i才是1,接着再将这个0赋给等式左边的i,所以i始终是0
你如果换成i=++i,就可以得到100了
先看等式右边,i++,这个时候,i还是0,下次使用i的时候i才是1,接着再将这个0赋给等式左边的i,所以i始终是0
你如果换成i=++i,就可以得到100了
在javap里面看,语句istore_1是将暂存区中的值存入相应的变量区,也就是我们说的赋值。语句iload_1是将变量区中的值存入暂存区中。
因为i=i++;是先将i的值(0)存入暂存区,然后对变量区中的i自加1,这时i的值的确是1,不过随后的istore_1又将暂存区的值(0)赋给变量区的i,所以最后i = 0。
//100
class test
{
public static void main(String[] args){
int i=0;
for(int j=0;j<100;j++)
i++;
System.out.println(i);
}
}===============================================
//0
class hao
{
public static void main(String[] args){
int i=0;
for(int j=0;j<100;j++)
i=i++;
System.out.println(i);
}
}
================================================
//100
class test
{
public static void main(String[] args){
int i=0;
for(int j=0;j<100;j++)
i=++i;
System.out.println(i);
}
}
这个程序以看就明白了,