首页
题库
面试
求职
学习
竞赛
More+
所有博客
搜索面经/职位/试题/公司
搜索
我要招人
去企业版
登录 / 注册
首页
>
试题广场
>
请阅读下面代码,计算运行结果();public c
[单选题]
请阅读下面代码,计算运行结果();
public class HelloWorld {
public static void main(String[] args) {
int i = 2;
i += ++i;
System.out.println(i);
}
}
4
5
6
7
查看正确选项
添加笔记
求解答(1)
邀请回答
收藏(3)
分享
纠错
2个回答
添加回答
1
似火流年
不太明白5是怎么出来的
i+=++i
++i将i变为3
等式右边是3,i也变成3
3+3=6
这个为啥不对啊
————————————————————————————————————————
刚电脑上实操了下,发现答案确实是5
但如果我把代码改成
public class HelloWorld {
public static void main(String[] args) {
int i = 2;
int a=0;
a= ++i;
i+=a;
System.out.println(i);
}
}
那么结果就成了6
——————————————————————————————————-——————
问题好像是出在“++i”对“i”的上
对于这道题,当执行“++i”后,返回3,i没变,此时进行“i+=”操作,实际为2+3
所以答案是5
但问题在于“++i”本省也有个对i值的改变操作,那个操作去哪里了???
————————————————————————————————————————
一个想法(一会儿我看看源码去,如果看懂了就没这条,没有就......你懂的)
在java中一条语句执行过程中(以“;”作为一条语句的区分)
对值的改变不是立即生效,他会把对值的改变先记录下来,等这一条语句执行完后,再对值操作
以这道题为例,“i+=++i”这条语句中,对i有2次赋值操作,一次是“++i”自带的一个i=i+1,i=3,一个是“i+=”对“i”的一个变化
因为根据假设,在这条语句执行过程中,“i”值不会发生变化,所以,当执行“i+=”时,“i”的值还为2,此时因为“++i”的返回值为3,所以2+3=5
所以可得到对“i”的第二个赋值语句,i=5
这两个赋值语句,根据时间排序应该是先执行“i=3”,然后执行“i=5”
所以后一个“i=5”将前一个覆盖了,所以最后结论是“i=5”
编辑于 2019-12-14 11:26:11
回复(0)
0
牛客633130707号
C++中是6
发表于 2021-09-17 20:00:27
回复(0)
这道题你会答吗?花几分钟告诉大家答案吧!
提交观点
问题信息
2020
数据库工程师
搜狐畅游
上传者:
小小
难度:
2条回答
3收藏
317浏览
热门推荐
相关试题
下列各项中,体现实质重于形式这一会...
搜狐畅游
职能
2019
财务
评论
(2)
看图回答
判断推理
2020
人力资源
安永
审计
税务服务
风险管理
管理咨询
行政管理
评论
(1)
来自
职能类模拟题2
看图回答
判断推理
2020
人力资源
安永
审计
税务服务
风险管理
管理咨询
行政管理
评论
(3)
来自
职能类模拟题2
已知a
40
=...
京东
职能
2019
财务
保险
评论
(1)
《拳皇97》最后BOSS是谁?
游戏常识
评论
(1)
扫描二维码,关注牛客网
意见反馈
下载牛客APP,随时随地刷题