一个再基础不过的问题了!! int num= 1;num= num+(num++);System.out.println(num);大家认为打印结果应该为多少?!我很纳闷,最后一个num++去哪里了?!!!! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 2,改成int num= 1;num= num+(++num);System.out.println("this is value="+num);就是3 看来你还没搞懂"表达式值"的概念。(num++)的表达式值为1,变量num值为2;所以num=num+(num++)等于1+1=2 "表达式值"的概念我想我还是懂的,你的意思无非是num = num+(表达式);如果光从这个层面上更本没什么好值得讨论的。但是关键是在运算完num = num+(表达式)后,最后还有个num++的过程为什么不起作用了。我想知道的事java内部的机制。换个角度,如果只是个"表达式值"的概念,那你不妨在C语言里试试同样的语句,看看结果怎么样???! 顶,C里面结果就是3但JAVA里就是2了,为什么不一样,那哪个又是正确的呢? 当然2个都是正确的,其实我倒觉得C的结果倒是很容易理解,java的倒觉得的怪怪的。 num=num+(num++)是不是可以这样理解:temp1=num;temp2=num;num=num+1;num=temp1+temp2;如果:num=num+(++num):temp1=num;num=num+1;temp2=num;num=temp1+temp2; 我来说两句吧。INT I=0;I=I++;虚拟机见到I++表达式,就新创建了一个对象,作为“I”的副本,同时原对象加一,“I”作为一个引用此时指向了新的对象“I”,虽然老对象的“I”变成了2,但没有引用指向它,它被抛弃了。而新的对象“I”的值是1。I=I++的表达式无论怎么重复,其I的值始终是1。大家可以 用FOR循环试试。 道理是这样的,不过在不同的编程环镜下得到有结果是不同的哦就像TC中结果是3而在JAVA里就是2了,这又是什么原因呢 JAVA中遇到类似(...+ sum++ +...)等表达式的时候如果后面的省略号部分没出现sum,那么最后一次的sum++会等到()运算结束之后进行自加如果后面的省略号部分出现了sum,那么最后一次的sum++会在使用sum之前进行,也就在()之前进行了这个与c/c++不一样,在c/c++中,sum++一定在其后面的+之前进行自加,也就一定在()结束之前进行所以可以总结为:JAVA中的后置++运算符并不是在取置之后立即进行,而是在表达式运算完毕或者最后一次使用该目标数之前进行。C/C++中的后置++运算符是在取置之后立即进行。于是,可以得到下面的运算结果: int sum=1;JAVA sum+(sum++)=2 sum+(sum+++sum)=4C/C++ sum+(sum++)=3 sum+(sum+++sum)=4 不好意思,有错别字:pJAVA中的后置++运算符并不是在取值之后立即进行,而是在表达式运算完毕或者最后一次使用该目标数之前进行。C/C++中的后置++运算符是在取值之后立即进行。 Java资源文件存取问题 struts中数据库连接的奇怪现象 一个正则表达式,匹配中文中的全角字符. 如何修改JButton的大小 java 中类的引用 请教,如何运行JAVA,谢谢! servlet输出对象时,content type设成什么类型? 请问,学java之类的东西,先看什么,再看什么? 我刚刚接触JAVA,便当头一棒。谁能帮帮我?定重谢! 请问BEA Tuxedo的License怎样用2? 关于 JAVA 就业前景的看法。。。。希望已经工作的大侠们,给点建议。 一个java平台下的类Excel的报表软件...
改成
int num= 1;
num= num+(++num);
System.out.println("this is value="+num);
就是3
(num++)的表达式值为1,变量num值为2;
所以num=num+(num++)等于1+1=2
换个角度,如果只是个"表达式值"的概念,那你不妨在C语言里试试同样的语句,看看结果怎么样???!
C里面结果就是3
但JAVA里就是2了,
为什么不一样,那哪个又是正确的呢?
是不是可以这样理解:temp1=num;
temp2=num;
num=num+1;
num=temp1+temp2;如果:
num=num+(++num):temp1=num;
num=num+1;
temp2=num;
num=temp1+temp2;
INT I=0;I=I++;
虚拟机见到I++表达式,就新创建了一个对象,作为“I”的副本,同时原对象加一,“I”作为一个引用此时指向了新的对象“I”,虽然老对象的“I”变成了2,但没有引用指向它,它被抛弃了。而新的对象“I”的值是1。I=I++的表达式无论怎么重复,其I的值始终是1。大家可以 用FOR循环试试。
就像TC中结果是3
而在JAVA里就是2了,这又是什么原因呢
如果后面的省略号部分没出现sum,那么最后一次的sum++会等到()运算结束之后进行自加
如果后面的省略号部分出现了sum,那么最后一次的sum++会在使用sum之前进行,也就在()之前进行了
这个与c/c++不一样,在c/c++中,sum++一定在其后面的+之前进行自加,也就一定在()结束之前进行所以可以总结为:
JAVA中的后置++运算符并不是在取置之后立即进行,而是在表达式运算完毕或者最后一次使用该目标数之前进行。
C/C++中的后置++运算符是在取置之后立即进行。于是,可以得到下面的运算结果:
int sum=1;
JAVA sum+(sum++)=2 sum+(sum+++sum)=4
C/C++ sum+(sum++)=3 sum+(sum+++sum)=4
JAVA中的后置++运算符并不是在取值之后立即进行,而是在表达式运算完毕或者最后一次使用该目标数之前进行。
C/C++中的后置++运算符是在取值之后立即进行。