关于i++的底层实现原理

大家都知道i++在做运算的时候,是先赋值再自加1,但底层究竟是怎样实现的呢?下面,就三个例子来说明一下i++的底层实现原理。

第一个例子:

public class Test1{

	public static void main(String [] args){
	
		int i = 10;

		i = i++;

		System.out.println(i);
	}
}
程序输出为10。

因为i++在作计算的时候要引入一个临时的变量,底层是这样实现的:

_temp = i;

i = i + 1;

i = _temp;
先把i的值赋给一个临时变量_temp,然后再作自加1的操作,最后又把临时变量_temp的值赋给了i,看到这里有点迷糊了吧。

如果换一种写法,int j = i++,自己就能够看懂了,底层也就是这样实现的:

_temp = i;

i = i + 1;

j = _temp;
所以,无论是哪种情况,最后打印出的结果都是10。

第二个例子:

public class Test2{

	public static void main(String[] args) {
		
		int i = 0;
		
		int sum = (i++)+(i++);
		
		System.out.println(sum);
	}
}
程序输出结果为1。

这个题参考第一个例子,可以这么理解:

假设有一个变量m接收第一个i++的计算结果,那么m的值一定是0,而底层i的值变成了1

再假设又有一个变量n接收第二个i++的计算结果,由于底层i的值变成了1,所以n的值是1,

那么,计算过程就变成了m+n,等于1。

第三个例子:

public class Test3{

	public static int test(){
	
		int i = 0;

		try{
		
			return i++;
		
		}finally{
			
			i++;	
		}
	}	

	public static void main(String [] args){
	
		int j = test();

		System.out.println(j);
	}
}
程序打印出j的值是0。

无论什么时候,只要是有finally语句块,就一定会执行的,所以底层i的值是2。

假设有一个变量s接收try语句块中i++的值,s为0,return s,所以j的值是0。

这道题可以改一下,finally语句块中的语句改为return i++,结果是什么。

结果j的值是1,因为最后的返回结果不是try语句块中的结果,而是finally语句块中结果。

执行try语句块中的语句,i的值变成了1,所以finally语句块中的语句结果是1,底层i的值是2。

再改一下,finally语句块中的语句为return ++i,结果是什么。

结果j的值是2,因为最后finally语句块中的语句是i自加1之后,再return的。

所以finally语句块中返回的是2,底层i的值是2。

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值