BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / java / #40989同步于 2015/5/22
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖

请教一个x++的问题

singingwheat
2015/5/22镜像同步29 回复
public class T2 { public static void main(String[] args){ int i = 1; int j = i++ + i++; int p = 1; int k = p++; System.out.println(j); System.out.println(k); } } 请问各位大神 为什么int k = p++;执行后k还是1 但是int j = i++ + i++;执行后j就是3,而不是2, 就是说为什么int k = p++,p还没自增就赋给了k 但是是int j = i++ + i++里i却自增了两次才赋给了j,而不是自增一次赋给j后,再自增第二次呢? 谢谢各位大神!
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
nuanyangyang机器人#1 · 2015/5/22
求值顺序: https://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.7.1 按我的理解,对于二元运算符,Java永远先求左边的值,再求右边的值,最后进行运算。 前缀++x运算: https://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.15.1 后缀x++运算: https://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.14.2 我理解,将加一的结果存入变量,是求值过程的一部分,所以和求值顺序一致。 所以我认为副作用会在求值的同时立即发生,而不是等到整个加法表达式发生之后再发生。
nuanyangyang机器人#2 · 2015/5/22
【 在 singingwheat 的大作中提到: 】 : [code=java] : public class T2 { : public static void main(String[] args){ : ................... 怎么原帖改了…… 这里有讲解,看吧: https://docs.oracle.com/javase/tutorial/java/nutsandbolts/op1.html
singingwheat机器人#3 · 2015/5/22
问过好几个, 大神指的哪个问题呢? 【 在 PhilipPenn 的大作中提到: 】 : 之前问的第一个问题已经搞明白了?
lixing机器人#4 · 2015/5/22
直接调试一下不就知道结果了。
nuanyangyang机器人#5 · 2015/5/22
【 在 lixing 的大作中提到: 】 : 直接调试一下不就知道结果了。 那只能说用这个java编译器编译以后在这个jvm上以这些flag开着(或者关着)debug这次运行结果是这个,不能说明别的情况也这样。
lee8464机器人#6 · 2015/5/23
我的理解是这样的:k=p++,对于p存在读和写两个操作,而且是先读原值再写入加1之后的值,最后再把原值赋给k。 j=i++ + i++;这里第一个i是1,完了之后自增1,第二个i是2,所以j是3。 有个更有趣的例子:int i=0;i=i++;System.out.print(i);你猜输出是多少?
noEasy机器人#7 · 2015/5/23
1? 【 在 lee8464 的大作中提到: 】 : 我的理解是这样的:k=p++,对于p存在读和写两个操作,而且是先读原值再写入加1之后的值,最后再把原值赋给k。 : j=i++ + i++;这里第一个i是1,完了之后自增1,第二个i是2,所以j是3。 : 有个更有趣的例子:int i=0;i=i++;System.out.print(i);你猜输出是多少?
wxl2014机器人#8 · 2015/5/23
哪里有那么麻烦啊 i++就是先用了i再加一,++i就是先把i加一在用,记住这个就可以了啊
singingwheat机器人#9 · 2015/5/23
是1么 【 在 lee8464 的大作中提到: 】 : 我的理解是这样的:k=p++,对于p存在读和写两个操作,而且是先读原值再写入加1之后的值,最后再把原值赋给k。 : j=i++ + i++;这里第一个i是1,完了之后自增1,第二个i是2,所以j是3。 : 有个更有趣的例子:int i=0;i=i++;System.out.print(i);你猜输出是多少?