深入理解Java中的++i 与i++
引言:
对于i++ 与++i ,相信大家都不陌生,++i 是先将变量的值加1再参与运算,i++ 是先参与计算在将变量的值加1.关于二者的区别的确可以这样认为,但是他们真的是一个先加,一个后加吗?
下面看一个例子:
public class Test {
public static void main(String[] args) {
int i = 15;
f1(i);
f2(i);
f3(i);
f4(i);
}
public static void f1(int i){
int j = ++i;
System.out.println("++i 对j赋值 : ");
System.out.println("i = " + i);
System.out.println("j = " + j);
}
public static void f2(int i){
int j= i++;
System.out.println("i++对j赋值: ");
System.out.println("i=" +i);
System.out.println("j=" +j);
}
public static void f3(int i){
i = ++i;
System.out.println("++i 对i赋值 : ");
System.out.println("i= " + i);
}
public static void f4(int i){
i = i++;
System.out.println("i++对i赋值");
System.out.println("i=" +i);
}
}
运行结果:
++i 对j赋值 :
i = 16
j = 16
i++对j赋值:
i=16
j=15
++i 对i赋值 :
i= 16
i++对i赋值
i=15
对于前三个结果相信大家都理解,但是最后一个有点奇怪,按照上面的方法来说,虽然i++是先参与运算,然后再将值i加1,但是执行对自身的赋值后,它的值最后也应该加1,结果应该也像f2()中的i一样等于16呀.然而这里为什么会出现i等于15呢?
真正原因:
实际上,不管是i++ 还是 ++i,都是先将变量的值加1,然后才继续计算的。二者之间的真正区别在于:++i是将变量值加1后,使用增值后的变量进行运算,而i++是首先将变量赋值给一个临时变量,接下来对变量的值加1,然后使用那个临时变量的值进行运算。
下面用代码来说明:
int i = 2;
int j= ++i *10;
第二行就相当于
i += 1;
j = i * 10;
int i =2;
int j=i++ *10;
第二行就相当于
int temp = i;
i +=1;
j =temp*10;
现在回过头来看看之前的问题:
在f2()中,
i = ++i;
就相当于
i += 1;
i =i;
而f4()中,
i =i++ ;
则相当于:
int temp = i ;
i +=1;
i =temp;
现在便可以解释为什么i的值等于15了。
这里不再阐述。