首页 > 试题广场 >

请阅读下面代码,计算运行结果();public c

[单选题]
请阅读下面代码,计算运行结果();
public class HelloWorld {
    public static void main(String[] args) {
       int i = 2;
       i += ++i;
    System.out.println(i);
    }
}
  • 4
  • 5
  • 6
  • 7
不太明白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)
C++中是6
发表于 2021-09-17 20:00:27 回复(0)