深入理解Java的自增运算

首先先来看一段程序:

public class Test
{
	public static void main(String[] args)
	{

		int i = 3;
		int s1, s2, s3 = 0;

		s1 = (i++) + (i++) + (i++);

		i = 3;

		s2 = (++i) + (++i) + (++i);

		for (i = 0;i < 10;i ++)
		{
			s3 = s3 ++;
		}
		System.out.println("s1=" + s1);
		
		System.out.println("s2=" + s2);
		
		System.out.println("s3=" + s3);

	}

}

结果:

s1=12
s2=15
s3=0

结果或许不是想象中的那样;

             因为Java中存在中间缓存变量的机制,在Java语言中,编译时并没有为变量分配内存,仅仅是创建了一种类型变量的对象引用,在类文件被解释执行时,每次都要为所执行到的变量创建一个临时对象(分配内存),如变量i,编译时并未分配内存,在运行时执行到赋值语句i=3时,会创建一个整形变量对象并初始化为3;

            计算s1和s2时,是前置时先计算后使用,后置时先使用后计算;变量i使用了三次,就会分别创建三个临时的整形变量对象,分配相应的内存空间,用来存储每次对自增表达式的计算结果;

所以        

s1 = ( i++ ) + ( i++ ) + ( i++ ) = 3 + 4 + 5 = 12

s2 = ( ++i ) + ( ++i ) + ( ++i ) = 4 + 5 + 6 = 15

而对于s3亦是如此,对于 s3 = s3 ++而言,Java的中间缓存变量机制可以使具体的执行过程理解为:

1.生成临时变量:                      int temp;
2.将s3的值拷贝给临时变量:             temp = s3;
3.s3加1:                            s3 = s3 + 1;
4.返回临时变量的值,并将此值赋值给s3:   s3 = temp;

            可见,在Java语言的程序运行过程中,变量在每一次被引用时,都会创建相应的对象实例,分配相应的内存区域,其中的内容不会被重写,在变量的生命周期内的每一次引用就会有一个临时的实例对象被建立,它们的值互不影响。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值