0%

面试题-先赋值后自增

题目

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public class BadCode {
/**
* 计算总数
*/

public void countDemo(){
int num = 0;
for (int i=0;i<100;i++){
num = num ++;
/**
* do something
*/

}
System.out.println(num);
}
/**
* 输出结果:num=0
* 然后 我叫了个大神来我帮我分析下。囧
*/

}

解释

1
2
3
4
i++ :
temp = i ;
i = i + 1;
i = temp;

so in “n = n ++;”, n always equals temp , always equals 0;

说明了“先赋值后自增”有问题,或许是理解问题或许是表述问题,也可能是实现问题。
赋值给自身,导致无法自增。
另外,反汇编发现自增操作好像发生在赋值操作之前。

是的,自增是发生在赋值之前,但是赋值的时候不是取的自增后的值。
(应该是产生了一个中间变量,javap 可以查看class 字节码)

来自 https://gitee.com/oschina/bullshit-codes/blob/master/java/BadCode.java