一朋友在朋友圈晒了这么一道题:
public static void main(String[] args){
int j = 0;
for(int i = 0; i < 100; i ++){
j = j++;
}
System.out.println(j);
}
输出是多少?
或者再看看这个:
int j = 0;
System.out.println(j++);
System.out.println(j);
第一个输出是多少?第二个输出又是多少?
结果是第一个输出是0;第二个输出是1。
j++;其实有三步:①拿到j②自增③赋值;
拿到后发现有打印需求,先打印输出,再自增
所以第一个问题输出什么也就不言而喻了。
下面是几种不同的写法,更有助于理解这种游戏。
//j = j++;先赋值,再加1,导致每次进入循环后,j都是0,即每次都是从头开始 -->赋值运算早于自增运算
//j++; 每次自增1,循环100次,最后j=100
//j = j + 1; 加法运算早于赋值运算,最后结果为100
//++j; // 100
//The assignment to variable j has no effect 变量j的赋值没有作用, ++j本身就包含了赋值给j
//j = ++j; -->这种写法本身没有意义