黑马程序员技术交流社区
标题:
i=i++
[打印本页]
作者:
张冉冉
时间:
2012-4-25 10:10
标题:
i=i++
本帖最后由 张冉冉 于 2012-4-26 14:39 编辑
曾经朋友发现了这个问题,i=i++,运行后,i值不变,谁能帮忙解释下呢?
作者:
kevindavid
时间:
2012-4-25 10:14
本帖最后由 kevindavid 于 2012-4-25 10:30 编辑
public static void main(String[] args){
int i=2;
i=i++;
System.out.println(i);
}
你把“i=i++”改成“i=++i”你的是这个是i先赋值给了“i”然后再执行的++所以就没有将++后的值赋给“i”这个操作 ;++在数值前面就是先执行++再数值后面就是后执行++
public static void main(String[] args)
{
int i=2;
i=++i;
System.out.println(i);
}
作者:
刘永菲
时间:
2012-4-25 10:16
能否把源代码贴上来?猜想是可能赋值是出现问题。堆内存不变,栈内存读到的依然是原址
作者:
张冉冉
时间:
2012-4-25 10:16
public static void main(String[] args){
int i=2;
i=i++;
System.out.println(i);
}
作者:
褚代江
时间:
2012-4-25 10:17
i=i++,应该和i=++i区别,
i=i++ 的意思是 执行i=i之后i再加1
i=++i 的意思是 i先加1,在执行赋值语句
作者:
邱俊杰
时间:
2012-4-25 10:55
楼主、i++呢、是程序是先用 i 再自加的。 ++i 是先加再用的。这个必须搞清楚。
int i=0;
System.out.println(i=i++);
System.out.println(i=++i);
//结果是0 和 1 你懂了吧?
复制代码
作者:
张冉冉
时间:
2012-4-25 11:52
表面的东西我也懂,我想知道更深点的东西,内部机制啥的。
作者:
魏征
时间:
2012-4-25 11:53
public static void main(String[] args){
int i=2;
i=i++;
System.out.println(i);
}
i=i++是先赋值后自增。int i=2在i=i++中,先把值2赋给了i,在复制完成后值2自增一次,当却没有把值赋给i,所以打印的结果是2.
作者:
张棣
时间:
2012-4-25 12:03
前自加:++ i 和后自加i ++中的 i 都自身加一(就是说 i 原值是1,自加后就是2,不管是前自加还是后自加。)
但将自加
后
赋值
时就不一样了:
i = ++ i 是将++i的值赋值给i;(i = ++i)
i = i ++ 是先将 i 的值先赋值给i;(i = i)
自加跟自减是一样的、(建议先强记)
作者:
HeiMaYSL
时间:
2012-4-25 12:23
public static void main(String[] args){
int i=2;
i=i++;
System.out.println(i);
}
这个问题主要是:i=i++和i=++i区别
i=i++ : 程序会先执行i=i之后i ,此时,在栈内存里,存了个,i=2;因为,栈内存里存的有变量等等,而堆内存里存储的有对象等等;所以,就先把2赋给了i。
i=++i : 程序会先执行++1,可以把它看成"i=(i+1)"在执行赋值语句,也就是说"+"在前边就现在+号吗,那就是i=2+1了。所以,这样的话,结果就会变了。
猜想是可能赋值是出现问题。堆内存不变,栈内存读到的依然是原址
作者:
付左军
时间:
2012-4-25 14:48
i=i++先赋值在自增,++i先自增,在赋值
作者:
胡奎
时间:
2012-4-25 15:25
前自加:++ i 和后自加i ++中的 i 都自身加一
但将自加后 赋值 时就不一样了:
i = ++ i 是将++i的值赋值给i;(i = ++i)
i = i ++ 是先将 i 的值先赋值给i;(i = i)
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2