请教:关于++,--的问题(在线等答案)

today913 2006-03-29 10:31:16
int x=-1,y=0;
System.out.println(y=x++ +x);//output: -1
System.out.println(y=x+ x++);//output: -2

请问下第一个表达式为什么答案是-1,++不是在计算完整个表达式才对变量进行+1操作吗?谢谢!
...全文
159 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
Camelh 2006-03-29
  • 打赏
  • 举报
回复
to:aywrenyue(基本功修炼中……)
楼主想问的是两个表达式的差别;所以他的代码应该在第二个输出语句前重新把x的初值设为-1,y设置成为0
today913 2006-03-29
  • 打赏
  • 举报
回复
谢谢大家,谢谢huyc_fly(),我明白了~
today913 2006-03-29
  • 打赏
  • 举报
回复
不好意思,我的意思是这是两种情况,分开运行,如果写在一起的确如楼上所说,给你带来了歧异,不好意思,谢谢你的解答。
Camelh 2006-03-29
  • 打赏
  • 举报
回复
就是因为x++取值后马上加1,所以导致后面的x取的值是被加了一的结果
aywrenyue 2006-03-29
  • 打赏
  • 举报
回复
楼主说的答案好像不对吧
-----------------------------
int x=-1,y=0;
System.out.println(y=x++ +x);//output: -1
System.out.println(y=x+ x++);//output: 0
------------------------------------------------
原因:
1.单目运算符优先级要高所以表达式:
y=x++ +x 等同与
y=(x++)+x
=-1+0 //此处因为x++表达式的值为-1,而此时x的值为0。
=-1
2.在第二个表达式中由于此时x的值为0。所以
y=x+ x++
=x+ (x++)
=0+0 //此处因为x++表达式的值为0,而此时x的值为0。
=0

-------------------------------------------------------------------
由此可以得出楼上的似乎解释的有问题了!
cocosunshine 2006-03-29
  • 打赏
  • 举报
回复
public class Test
{
public static void main(String args[])
{
int x=-1,y=0;
System.out.println(x);
System.out.println(y);
System.out.println(y=x++ +x);//output: -1
System.out.println(y);
System.out.println(x);
System.out.println(y=x+ x++);//output: 0
}
}

看了代码你就明白了。
today913 2006-03-29
  • 打赏
  • 举报
回复
我以前的理解是后置++运算符在等号右边的所有表达式都计算完之后才对变量+1,从“System.out.println(y=x++ +x);//
y=x++ +x可以分解成两步来看x++先取x的值为-1,然后x的值变为0;则第二个x此时为0了,所以-1+0=-1,即输出-1” 看来好象不是这样的啊!而是在它本身取值之后就马上对变量进行+1,好多书都讲的不清不楚的~~~~哎~
today913 2006-03-29
  • 打赏
  • 举报
回复
我在看SCJP大全上面有道题是关于这个的,很纳闷,所以问下,谢谢各位了~
today913 2006-03-29
  • 打赏
  • 举报
回复
如果是y=(x++ +x),应该是y=(-1 + (-1)) =-2 吧~~然后 x再+1吧,为什么不是呢~~没搞懂
Camelh 2006-03-29
  • 打赏
  • 举报
回复
建议楼主不要写这种费解的代码
System.out.println(y=x++ +x);//
y=x++ +x可以分解成两步来看x++先取x的值为-1,然后x的值变为0;则第二个x此时为0了,所以-1+0=-1,即输出-1
System.out.println(y=x+ x++);//
y=x+ x++这个也分成两步来看:前半部分x值为-1,后部分x++此时是先取x的值(-1),然后x再加一变为0,但x++表达式的值为-1;所以-1+(-1)=-2
jobs002 2006-03-29
  • 打赏
  • 举报
回复
++的优先级比+要高,所以先执行++,而第二个表达式,因为其中的i++的值是i,所以结果是-2
hemiao_1993 2006-03-29
  • 打赏
  • 举报
回复
这个可不一定, 这种东西也没必要死记硬背, 也没什么意义, 必要的时候上机调一下就出来了, 是先自加还是先运算表达式运行结果是最有说服力的答案.
和底层堆栈的实现有关.
huangdeji 2006-03-29
  • 打赏
  • 举报
回复
System.out.println(y=x++ +x);//output: -1
y=x++ y = 0;
0 + x = -1;
HeroChen24 2006-03-29
  • 打赏
  • 举报
回复
赞同huyc_fly()的解释~!

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧