java ++运算的疑惑 public class Test { public static void main(String[] args) { int i = 0; fun(i); System.out.println(i); i = i++; System.out.println(i); } public static void fun(int i) { i++; }}为什么第二个i输出结果是0? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 http://blog.csdn.net/ZangXT/archive/2008/11/05/3229281.aspx希望能看懂。 晕 这题目我见过好几次了java 的语言规范!对于简单的代码 int i=i++; 等效于int t=i;i=i+1;i=t;所以 i 最后还是没变我也是看别人的帖子的 这是java 的语言规范 和 c 不一样 好像是因为 编译器不一样的原因 这样写 编译的速度会快点吧~~~ i++等同于i+=1;++放在变量前面时:表示先把变量进行+1再赋值++放在变量后面时:表示先把变量进行赋值再把变量进行+1操作i = i++;相当于,先进行赋值,再进行+1操作,最后";"结束,则打印结束为:0调用fun(i)后,这时i已经进行了+1的操作了,则打印结果为:1LZ发贴前可以先看看以前的贴是否有类似的内容,讲的很全面的 java 的语言规范! 对于简单的代码 int i=i++; 等效于 int t=i; i=i+1; i=t; 所以 i 最后还是没变 我也是看别人的帖子的 这是java 的语言规范 和 c 不一样 好像是因为 编译器不一样的原因 这样写 编译的速度会快点吧~~~ i=i++;1:1=i;2:i=i+1; int i=i++; 有问题 我定义错了 基本上说对了,我想补充的是:如果在没有变量直接接受i++或者++i的结果的话,它们两个是一样的,如:单纯的在一句中 i++;或者 ++i; 是等效的; 这里我们就假设 i=0;当 int temp1 = i++;或者 int temp2 = ++i;则 temp1 = 0; temp2 = 1; 就是5楼的解释了 不要跟C比较,C语言规范并没有规定这种情况下的求值顺序,所以不同的C语言编译器得到的结果可能是不同的。而java语言规范规定了具体的求值顺序。 看到有人这样说:“前置的自增自减是在这一次引用前执行的,后置的操作则是在这一次引用后,下一次引用前执行.”那底层实现是不是可以这样理解(和八楼的那样):i=i++等价于t = i;i++;i = t;是这样吗? 说下我对这个知识的理解过程:开始就是记住的一句口诀,i++是先赋值后运算,++i是先运算后赋值.我就一直没搞明白是个啥意思.怎么个运算怎么个赋值.最终我终于领悟到了,这两句所谓的口诀是要和赋值运算符("=")搭配起来用的.比如int i , j = 5;j = i++;System.out.println(j); Output:5j = i;System.out.println(j); Output:6 i=i++等价于 t = i; i++; i = t; 1 java中基本类型的传递都是值传递,所以第一个i的输出结果是0;2 等号右边如果是表达式,则先执行表达式,再把返回结果赋值给左边i = i++;表示:先执行等号右边的i++,也就是说,这时i的值是1;然后把表达式i++的结果返回给左边,由于i++本身的返回值是0,所以把原来的1覆盖了,最后i的值就是0 i=0;i = i++;i++先i=0操作完再i+1,i++的值是0 JDBC连接oracle数据库问题 内置窗体的问题~ java可拖动组件连接线问题 小弟新来的 有个问题请各位来看看 在线等答案,如何改变方法中参数的值? 有关于java Application的问题 这是什么问题?在线等待 有看过JDK1.3源代码的人吗? 急急急!!!用到parseInt函数应该import java.lang.*;是吗?为何有错呢? java程序员进来帮我看看, 关于JTextArea在一个循环中,如何使用鼠标事件监听的问题 如何才能把工程的版本升级到webapp 2.4
希望能看懂。
对于简单的代码
int i=i++; 等效于
int t=i;
i=i+1;
i=t;
所以 i 最后还是没变我也是看别人的帖子的 这是java 的语言规范 和 c 不一样 好像是因为 编译器不一样的原因 这样写 编译的速度会快点吧~~~
++放在变量前面时:表示先把变量进行+1再赋值
++放在变量后面时:表示先把变量进行赋值再把变量进行+1操作
i = i++;相当于,先进行赋值,再进行+1操作,最后";"结束,则打印结束为:0
调用fun(i)后,这时i已经进行了+1的操作了,则打印结果为:1LZ发贴前可以先看看以前的贴是否有类似的内容,讲的很全面的
对于简单的代码
int i=i++; 等效于
int t=i;
i=i+1;
i=t;
所以 i 最后还是没变 我也是看别人的帖子的 这是java 的语言规范 和 c 不一样 好像是因为 编译器不一样的原因 这样写 编译的速度会快点吧~~~
1:1=i;
2:i=i+1;
单纯的在一句中 i++;或者 ++i; 是等效的; 这里我们就假设 i=0;
当 int temp1 = i++;或者 int temp2 = ++i;
则 temp1 = 0; temp2 = 1; 就是5楼的解释了
而java语言规范规定了具体的求值顺序。
那底层实现是不是可以这样理解(和八楼的那样):
i=i++等价于
t = i;
i++;
i = t;
是这样吗?
int i , j = 5;
j = i++;
System.out.println(j); Output:5j = i;
System.out.println(j); Output:6
t = i;
i++;
i = t;
2 等号右边如果是表达式,则先执行表达式,再把返回结果赋值给左边
i = i++;
表示:先执行等号右边的i++,也就是说,这时i的值是1;
然后把表达式i++的结果返回给左边,由于i++本身的返回值是0,所以把原来的1覆盖了,最后i的值就是0
i = i++;
i++先i=0操作完再i+1,i++的值是0