public class Test {
public static void main(String[] args){
int j=0;
for(int i=0;i<100;i++){
j=j++;
}
System.out.println(j);
}
}输出结果为0;求解释,谢谢
public static void main(String[] args){
int j=0;
for(int i=0;i<100;i++){
j=j++;
}
System.out.println(j);
}
}输出结果为0;求解释,谢谢
他是表示先赋值后加,就是先把值赋给变量而后本身在+1的,而不是表示每循环加一次,把得到的结果赋给左边的j,而你在最开始就给j赋了值为0,所以无论你循环多少次,他都是0如果你用j= ++j;这样就是先加后赋值,就是100了
那么为什么j++的j自增后没有反映到int j的j去呢?
java中对基本类型是用的值传递(既是真实的数值,而不是传递引用/指针的值),
i=i++,首先计算 i++ 表达式的值,并保存到某个内存地址,当前 i=0;
然后自增变量值运算,内存中的i执行递增操作,i=1,
然后赋值运算,执行=,从内存地址中获取第一步的计算结果,由于i++的结果是0,所以i又从1变成0
呵呵,以上仅个人看法,如果有错还望多多指正
首先刚开始J = 0 , 在J = J++的时候, 等号前面的那个J已经不是J声名时的那块内存区了,JVM为他重新为他分配一块新的内存区.比如说,int j = 0 时,j的内存地址为00xx01,值为0。那么经过第一循环的以后前面那个J内存地址为00xx02,值为0,而后面那个J(内存地址00xx01)则会进行++操作,此时他的值为1,不过他已经不能影响到前面J的值了,此时J的内存地址就已经是等号前面的那个J的内存地址了(00xx02),再进行第二循环的时候,j的内存地址是:00xx02,值是0,至于00xx01那块内存区域,因为已经没有人再使用,所以将会在下一次垃圾回收的时候被GC回收,此时他(内存地址为00xx02的J)变成后面的那个j,前面那个J 则又会重新分得一块新的内存区域00xx03,值仍然是0,而00xx02则又会被丢弃然后被GC回收,依此类推,直至最后打印时J仍然为0,但他的内存地址已经不是最开初的00xx01了,换句话说,他已经不是当初的那个J了。