返回信息流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后,再自增第二次呢?
谢谢各位大神!
这是一条镜像帖。来源:北邮人论坛 / java / #40989同步于 2015/5/22
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖
请教一个x++的问题
singingwheat
2015/5/22镜像同步29 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
求值顺序: 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
我理解,将加一的结果存入变量,是求值过程的一部分,所以和求值顺序一致。
所以我认为副作用会在求值的同时立即发生,而不是等到整个加法表达式发生之后再发生。
【 在 singingwheat 的大作中提到: 】
: [code=java]
: public class T2 {
: public static void main(String[] args){
: ...................
怎么原帖改了……
这里有讲解,看吧: https://docs.oracle.com/javase/tutorial/java/nutsandbolts/op1.html
【 在 lixing 的大作中提到: 】
: 直接调试一下不就知道结果了。
那只能说用这个java编译器编译以后在这个jvm上以这些flag开着(或者关着)debug这次运行结果是这个,不能说明别的情况也这样。
我的理解是这样的:k=p++,对于p存在读和写两个操作,而且是先读原值再写入加1之后的值,最后再把原值赋给k。
j=i++ + i++;这里第一个i是1,完了之后自增1,第二个i是2,所以j是3。
有个更有趣的例子:int i=0;i=i++;System.out.print(i);你猜输出是多少?
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);你猜输出是多少?
是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);你猜输出是多少?