虽然在JAVA中有自增(++)自减(–)运算符的存在,但是在实际的开发中很少用到。但是最近准备面试的时候发现很多面试的题目中都有这方面的问题,所以觉得好好研究一下是很有必要的。
虽然我们都知道自增有前自增(++i)和后自增(i++)的情况,自减也是一样。而且我们都是到自增前自增是先加1在进行操作,后自增是先进行相应的操作在进行加1。同样自减的运算也差不多。
但是我们来看一道面试题
package com.carter.java01;
public class zizeng {
public static void main(String [] args){
int test = 0;
for(int i = 0;i<100;i++){
test = test++;
}
System.out.println(test);
}
}
很多人认为输出结果会是100,但是实际输出结果却是0。很多人觉得很惊讶,这是为什么呢?
原来这JAVA编译器运用了中间缓存机制,也就是说在运算的时候引入了一个中间变量。也就是说test=test++,这句话其实是等价于:
temp = test;
test = test +1;
temp = 0;
这样我们就不难理解结果是0了。同样的在前自增里面也是引入了中间变量如test = ++test;这条语句等价于:
temp = test+1;
test = test +1;
test = temp;
基于这样的思路我们就很好理解JAVA中的自增、自减问题了。下面我们再来看一道题。
public static void main(String [] args){
int i = 0;
int j = i++ + i++; //这条语句等价于j = (i++) + (i++)
System.out.println("输出i的结果为"+i);
System.out.println("输出j的结果为"+j);
}
}
分析当第一个(i++)时,引入一个中间变量temp及:
temp = i ;
i = i++;
temp = i;
所以就等价于0+(i++);所以j的最后结果是1, 但是i自加了2次所以最后的结果是2.