永发信息网

Java运算问题

答案:4  悬赏:0  手机版
解决时间 2021-03-17 02:31
  • 提问者网友:蔚蓝的太阳
  • 2021-03-16 17:37
Java运算问题
最佳答案
  • 五星知识达人网友:杯酒困英雄
  • 2021-03-16 18:44
int i=1
i+=++i;
等价下面:
i=i+(++i);
i=1+2
i=3追问++i后i的值不是成2了吗 那么i+2不是4吗追答你这会就迷糊在赋值的时候一个先后顺序问题,
++i 是2没错,但是左边的i也就是进入内存等待计算的仍然是1,此刻还没运算完毕,也就是说
还没决定i到底该赋值是几,懂了没?
在内存中没走完最后一步,就不算赋值完成.懂了没?
全部回答
  • 1楼网友:骨子里都是戏
  • 2021-03-16 22:05
考察的是++i ,表达式的值跟变量的值,可以留个邮箱我把资料发给你
  • 2楼网友:零点过十分
  • 2021-03-16 20:39
你这个相当于i=i+ ++i,这样应该能明白了吧,这里的=号是赋值的意思,最后才计算,所以是3
  • 3楼网友:千杯敬自由
  • 2021-03-16 19:48

我的建议是不要研究也不要写出这样的代码。这种代码在C/C++中是未定义行为。虽然我没有查到Java文档对此的定义,但鉴于大多数开发机器安装的都是Oracle的jdk,结果还是有参考性的。查看一下这段代码的bytecode:

解释一下每一行:

0: iconst_1 常数1入栈
1: istore_1 栈顶元素出栈并赋值给位置1的int型变量 (0~1对应Java代码:i=1)
2: iload_1 从位置1的int型变量中读出值并入栈
3: iinc 1,1 将位置1的int型变量自增1 (对应Java代码:++i)
4: iload_1 从位置1的int型变量中读出值并入栈
5: iadd 弹出栈顶两个int型变量并做加法,结果入栈 (对应Java代码:i+=i,结果为1+2=3)
6: istore_1 将第5步的结果写回变量i,此时i就变为3。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯