JAVA编程思想(第4版)赋值小结

赋值使用操作符“=”。对基本数据类型的赋值是很简单的。基本数据类型存储了实际的数值,而并非指向一个对象的引用,所以在为其赋值的时候,是直接将一个地方的内容复制到了另一个地方。例如:对基本数据类型使用a=b,那么b的内容复制给了a。若接着修改了a,b根本不会受到影响。

但是在为对象赋值的时候,情况不一样。比如对对象使用c=d,那么c和d都指向原本只有d指向的那个对象,举个例子:创建Area类

package test;

public class Area {
	int  a;
}
main函数:
package test;

public class Test {
	
	public static void main(String args[])
	{
		Area r1=new Area();
		Area r2=new Area();
		r1.a=1;
		r2.a=2;
		System.out.println("1:r1.a:"+r1.a+"	r2.a:"+r2.a);
		
		r1=r2;
		System.out.println("2:r1.a:"+r1.a+"	r2.a:"+r2.a);
		
		r1.a=3;
		System.out.println("3:r1.a:"+r1.a+"	r2.a:"+r2.a);
	}
}

在main函数里面创建了Area的俩个实例,然后给r1,r2分别赋值1,2。在控制台打印出r1.a,r2.a。然后将r2赋值给r1,然后修改r1, 再分别打印r1.a,r2.a。
结果如下图:
因为赋值操作的是一个对象的引用,所以修改r1的时候同时修改了r2。
这是因为r1和r2包含了相同的引用,同时指向了相同的对象。(原本r1包含了对对象的引用,是指向一个值为1的对象。在对r1赋值的时候,这个引用被覆盖,即现在指向一个r2指向的对象,而那个不再被引用的对象被“ 垃圾回收器“自动清理)。
这种现象被称为 别名现象。我们可以 采用r1.a=r2.a来赋值,这样r1,r2就不用绑定到相同的对象,但是这样违背了JAVA面向对象编程的思想,因为它直接操作了对象中的域。同样在 方法调用中也会出现别名问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值