非常简单的小问题! i = i++;就是i=i;i++; 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 基本同意日月的解释i=i++后,i还是等于0,所以后来输出的是0,而i的自加丢失了 sorry,我觉得刚才自己的解释很牵强,因为按日月的解释,原程序应该是:int i = 0;i = i;i++;System.out.println(i);结果应该是1才对呀。会不会是应为jdk的原因? i=i++后,i还是等于0,所以后来输出的是0,而i的自加丢失了这个解释应该是最好的,我自己认为 一楼没仔细看问题,还有跟一楼看法一致的兄弟,个人认为i++这个过程是在寄存器中进行的,i=i++;先赋值,然后i(寄存器中的i)自加(在寄存器中进行),接下去没有对寄存器中的i做任何操作,就释放掉i。System.out.printl(i)此处的i是内存中的i,因为在赋值的时候i被赋值为0,所以结果为0。个人愚见! i=i++; 的含义表面上是 i=i; i++;但这两个操作有可能在不同的地方进行,最后以哪个为准?我觉得“i=i++”是一个整体的表达式,它最终的值是由等号左边的值来定的。设i的存储单元为D。开始的时候,在内存中开辟一个临时存储单元E,用于存放等号左边的值,接着执行“i=i”,这时E中的值是0,接着执行“i++”(这个操作不同于加法,而是寄存器中进行的,再送回D),D中的值变为1,最后结束的时候,把E中的值送到D,释放E。所以最终i的值是0。再比如i=i+j+k。肯定要事先开辟临时存储单元E来存放最终的值,然后把i、j、k的值不断加进去,然后把E中的值送到i的存储单元D。这样就好理解以下代码的输出为6,而不是2 int i=1; int j=2; int k=3; i= (i++)+j+k; System.out.println(i); i=i++先取出i的值0赋给变量i,然后将i+1后的值1放在寄存器中,所以结果是0。i++是将i+1后的值1存进了变量i中,所以结果是1。 同意这种寄存器的说话,我在tc里试过,是1,在vc里也是1 跟寄存器有关,但不是寄存器的问题,因为所有的计算都要通过寄存器。原因是任何表达式的计算都要开辟临时存储单元,等号右端不管多么简单,都当表达式处理。 当执行i=i++的时候首先把i送入临时存储单元,然后i增值1,接着把临时存储单元的内容送入i。所以i不变 http://community.csdn.net/Expert/topic/3674/3674362.xml?temp=.5590784 还在讨论啊,其实很清楚了执行过程是:1 把等号右端当表达式,分配一个临时的存储单元E 2 把i送入E(这个i是右端的i,而不是左端的i)3 i增值1 4 右端表达式计算完毕 5 把E中的值赋给i 有些人把这个简单的问题看的太简单的,还是像 thomas_20(执子之手,与子偕老) 等兄弟进入寄存器的说法有一定道理 问题中用的都是i++,而有些一直在谈什么 i++和++i的区别,真是莫名其妙! thomas_20(执子之手,与子偕老) cxz7531(大花猫) 现在认为只有以上两位说得最有道理和清楚,也符合问题要求!! 大概是这个过程1 (register) t = i;2 i = i + 1; 此时i变为13 i = t同意者举手支持!:) int i=0i++i得1有什么错吗??int i =0 super.i = ii++super.i得0有问题吗??你用一个可以反回main方法 的函数本身就是错误JDK 应该报错会产生歧义的程序还是不要写的在main方法里也不要用基本变量也不要用i=i++这样的东西用i+=i会好一点点 "隐式的双main方法"能否详细解释一下,谢了. 最简单的你记住就是i=i++先赋值再运算i=++i是先运算再赋值 Java冒泡排序降序 awt,swing ,swt间区别 定义的JLabel显示不出来? 请问大家这道题的结果为什么是这样? 关于access的日期/时间类型的插入问题 关于线程的题: SWING 布局小问题,顶者有分 JDK 环境配置问题。我忙活了一个下午了。看了很多帖子,但是还是没用 手机发短信息用到Unicode串到GBK串的转换,怎样转换? 关于线程调度,高手请进! 求救,为什么弹出的窗口是个白板? odbc数据源创建出错????求助!!!!在线等!!
i=i++后,i还是等于0,所以后来输出的是0,而i的自加丢失了
int i = 0;
i = i;
i++;
System.out.println(i);
结果应该是1才对呀。会不会是应为jdk的原因?
这个解释应该是最好的,我自己认为
个人认为i++这个过程是在寄存器中进行的,
i=i++;先赋值,然后i(寄存器中的i)自加(在寄存器中进行),接下去没有对寄存器中的i做任何操作,就释放掉i。System.out.printl(i)此处的i是内存中的i,因为在赋值的时候i被赋值为0,所以结果为0。个人愚见!
i=i;
i++;
但这两个操作有可能在不同的地方进行,最后以哪个为准?我觉得“i=i++”是一个整体的表达式,它最终的值是由等号左边的值来定的。
设i的存储单元为D。开始的时候,在内存中开辟一个临时存储单元E,用于存放等号左边的值,接着执行“i=i”,这时E中的值是0,接着执行“i++”(这个操作不同于加法,而是寄存器中进行的,再送回D),D中的值变为1,最后结束的时候,把E中的值送到D,释放E。所以最终i的值是0。再比如i=i+j+k。肯定要事先开辟临时存储单元E来存放最终的值,然后把i、j、k的值不断加进去,然后把E中的值送到i的存储单元D。
这样就好理解以下代码的输出为6,而不是2
int i=1;
int j=2;
int k=3;
i= (i++)+j+k;
System.out.println(i);
i++是将i+1后的值1存进了变量i中,所以结果是1。
原因是任何表达式的计算都要开辟临时存储单元,等号右端不管多么简单,都当表达式处理。
当执行i=i++的时候首先把i送入临时存储单元,然后i增值1,接着把临时存储单元的内容送入i。所以i不变
执行过程是:
1 把等号右端当表达式,分配一个临时的存储单元E
2 把i送入E(这个i是右端的i,而不是左端的i)
3 i增值1
4 右端表达式计算完毕
5 把E中的值赋给i
cxz7531(大花猫)
现在认为只有以上两位说得最有道理和清楚,也符合问题要求!!
1
(register) t = i;
2
i = i + 1;
此时i变为1
3
i = t
同意者举手支持!:)
i++i得1有什么错吗??int i =0
super.i = i
i++
super.i得0有问题吗??
你用一个可以反回main方法 的函数本身就是错误
JDK 应该报错
会产生歧义的程序还是不要写的
在main方法里也不要用基本变量
也不要用i=i++这样的东西
用i+=i会好一点点
能否详细解释一下,谢了.
i=i++先赋值再运算
i=++i是先运算再赋值