++i 与i++的区别

深入理解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了。


如果,对底层有兴趣,可以用javap反编译命令,javac -c 包名.类名 则可以等到相应的伪代码。

这里不再阐述。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值