今天我这个菜鸟来跟大家讨论一个问题 问题 很简单 但我相信 这个问题能让我们更加的了解java虚拟机!j=0;j=j++;经过运算后,那 j 之后的答案是? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 0j++之后j++的值为0,j的值为1,然后把j++的值赋给j,即j=0;So,最后j的值为0; 老师说j++就是先计算,再加1,++j是先加1,再计算,这里的先后都是针对的j。 int i= 0;i = i++;相当于定义了一个int型变量i,并赋初始化值0,再内存中把i的初始化值再重新放进该变量,再拿出去做运算.就是先赋值,后运算i = ++i;的意思在内存中把i做了自增操作,再重新赋值给i;因此i++的结果是0;++i的结果是1; 其实这种问题,并不能让你更理解虚拟机。因为,无非就是副作用和顺序点的问题。如果,java官方明确定义了,副作用和顺序点。还有副作用之间的相互顺序。那么编译器就会有一个统一的实现,如果没有。那么不同的编译器的结果就可能不同。在这里需要看 j++ 这个副作用什么时候产生了。如果在赋值之前产生,那么结果为0。如果在复制后产生,那么结果为1。最佳时间就是别写这种代码。 结果是0.因为自增运算符有两种:++j 和 j++ 。++j是先计算后赋值,而j++是先赋值后计算。所以没有循环控制的情况下,以上例子如果打印J的话结果为0,而J的当前值为1. 获取linux系统时间 JMenu加快捷键 请教个问题,为什么静态接口可以只有静态变量没有方法呢? 请问个的问题 求助:急!急!急!把一个java代码添加到另一个java代码?急!急!急! jsp中怎么发自动邮件那? 关于jbuilder中querydataset查询数据库的问题 请高手耐心看看我的代码 BBS的统计问题 请问多个JAVA小应用程序在发布后如何对JAVA的类进行共享? SWT中如何实现label控件的闪烁? String初始化 之小牛角尖问题
j++之后j++的值为0,j的值为1,
然后把j++的值赋给j,即j=0;
So,最后j的值为0;
i = i++;相当于定义了一个int型变量i,并赋初始化值0,再内存中把i的初始化值再重新放进该变量,再拿出去做运算.就是先赋值,后运算
i = ++i;的意思在内存中把i做了自增操作,再重新赋值给i;
因此i++的结果是0;
++i的结果是1;