i=i++;i=? 如题:int i =0;i = i++;执行完结后i为什么还是等于0?c中也是这样吗? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 因为他是i++,i=0 在自增 如果++i就是先自增 c也是这样的 i=i++;相当于int temp=i;//读取i,准备给左侧赋值i=i+1;//i++;//左侧的操作完成i=temp;建议:不要在一个表达式中对同一个变量赋值超过1次. 一样..你换成 i=++i; 试试..我认为这种问题很无聊. 还有什么 i=i++; j=++j; z=(++i)+(j++);问你Z等于什么..纯粹脑子有病.. 你搞混了一个问题..就是赋值跟自增.先赋值,再自增 这样的话,执行结果应该也是1啊先赋值以后 i 的结果是 0;然后后面的i+1 但是.. i+1后并没有把值再次赋回给i..所以还是0. 呵呵,这个理解是错误的,i自增是i++就是i=i+1;会改变i的值的.具体原因我在上面贴子写过了,你可以看bytecode中是如何执行的,<Java Puzzlers>这本书中也有详细的解释. java和c的提取顺序是不一样的. 这个 Java Puzzlers 确实是那样写的..我的是错误的.楼主 赶紧来看帖子啊. 不好意思. 做了个测试i=0;i=i++;System.out.println(i) = 0;i=0;i++System.out.println(i) = 1;i=0;System.out.println(i++) = 0将i++改成++i则结果都为1另: i = ++i; 在Eclipse中提示对i赋值不生效, 但结果仍为1 我已经写过了j=j++;相当于:int tmp=j;j=j+1;j=tmp; int i = 0;int j = i++;int k = ++i; System.out.println( i );System.out.println( j );System.out.println( k );这个结果是2,0,2;通过这个例子可以基本分清赋值和自增的区别 c一样的只是运算顺序,但是结果是1,不是0。我认为这可以说是JAVA的一个BUG,用2楼的可以说明为什么结果是0,但是JAVA的这种解析是错误的,因为本来有两次的赋值运算,结果JAVA解析器只做了一次。 int i=0;//这个是先给i赋值,再进行自加,是两码事所以在输出的时候还是原来的初始值0i=i++;//结果为0//这个是先进行自加,再给i赋值i=++i;//结果为1 这不是bug,java语言规范中有说明。java毕竟是java,和c不同。 zangXT是正确的哦。其实这个过程中,i的值是从0-》1-》0 i在++前就先使用i再++,在后就先++后使用i 如果有底成的Java书籍,建议你去看看里面的语法找到后你就不会有想要的结果了这个C里面也有的小知识 c中等于1.在java中。i是个值的调用而非引用。 不管什么语言i++和++i得到的结果都应该是一样的int i = 0;System.out.println(i++);//得到0System.out.println(i);//得到1System.out.println(++i);//得到2i=i++;System.out.println(i);//得到2,首先进行赋值,然后++。因为i是值引用,所以旧的i改变不会影响到i。 我用C#试过了,和java得结果一样,=得优先级比++高。 使用eclipse 中的bug啦,对于它执行的先后,一步一步的让它跑啦,之后,你就知道这的原因啦,你可以试一下啦,这要比你问要来的实在呀,试一下啦! i=i++和i=++i结果是一样的没分别. 假如在你这些代码后面再加上一句System.out.println(i);你认为最后的结果是什么呢,我刚试过了,还是2.int i = 0; System.out.println(i++);//得到0 System.out.println(i);//得到1 System.out.println(++i);//得到2 i=i++; System.out.println(i);//得到2,首先进行赋值,然后++。因为i是值引用,所以旧的i改变不会影响到i。System.out.println(i);//假如在你这些代码后面再加上这一句结果还是2;而且用C的话结果并不一样int i = 0; printf("%d",i++); printf("%d",i); printf("%d",++i); i=i++; printf("%d",i); 结果是0123. i = i++;应该跟i++一样吧 这和jvm有关的,在自增运算中,java会开辟另一块空间给++ --使用,至使原来的值未改变因此输出为0;c++里会输出1; java非阻塞通信的问题,高手请解答 请教:java连接数据库 求一正则表达式,取HTML标签<p>中的样式样式内容 Java中的对象类型转换问题求教 程序在pstmt.executeBatch();的地方就一直不动了 问个final方法的问题 java中实现按“enter”键登陆 ======关于带包路径的JAVA程序调用C程序的问题====== 一个小问题,大侠帮忙! Map和List排序 关于JDBC读取结果集循环时停止的问题 applet执行思路
c也是这样的
相当于
int temp=i;//读取i,准备给左侧赋值
i=i+1;//i++;
//左侧的操作完成
i=temp;建议:不要在一个表达式中对同一个变量赋值超过1次.
我认为这种问题很无聊. 还有什么
i=i++; j=++j; z=(++i)+(j++);问你Z等于什么..纯粹脑子有病..
这样的话,执行结果应该也是1啊先赋值以后 i 的结果是 0;然后后面的i+1 但是.. i+1后并没有把值再次赋回给i..所以还是0.
具体原因我在上面贴子写过了,你可以看bytecode中是如何执行的,<Java Puzzlers>这本书中也有详细的解释.
i=i++;
System.out.println(i) = 0;i=0;
i++
System.out.println(i) = 1;i=0;
System.out.println(i++) = 0将i++改成++i则结果都为1另: i = ++i; 在Eclipse中提示对i赋值不生效, 但结果仍为1
j=j++;
相当于:
int tmp=j;
j=j+1;
j=tmp;
int j = i++;
int k = ++i;
System.out.println( i );
System.out.println( j );
System.out.println( k );这个结果是2,0,2;通过这个例子可以基本分清赋值和自增的区别
//这个是先给i赋值,再进行自加,是两码事
所以在输出的时候还是原来的初始值0
i=i++;
//结果为0//这个是先进行自加,再给i赋值
i=++i;
//结果为1
java毕竟是java,和c不同。
找到后你就不会有想要的结果了
这个C里面也有的小知识
在java中。i是个值的调用而非引用。
i++
和++i得到的结果都应该是一样的
int i = 0;
System.out.println(i++);//得到0
System.out.println(i);//得到1
System.out.println(++i);//得到2
i=i++;
System.out.println(i);//得到2,首先进行赋值,然后++。因为i是值引用,所以旧的i改变不会影响到i。
假如在你这些代码后面再加上一句
System.out.println(i);
你认为最后的结果是什么呢,我刚试过了,还是2.
int i = 0;
System.out.println(i++);//得到0
System.out.println(i);//得到1
System.out.println(++i);//得到2
i=i++;
System.out.println(i);//得到2,首先进行赋值,然后++。因为i是值引用,所以旧的i改变不会影响到i。
System.out.println(i);//假如在你这些代码后面再加上这一句结果还是2;
而且用C的话结果并不一样
int i = 0;
printf("%d",i++);
printf("%d",i);
printf("%d",++i);
i=i++;
printf("%d",i);
结果是0123.
应该跟
i++一样吧
至使原来的值未改变
因此输出为0;
c++里会输出1;