类引用数据类型的赋值操作

对于类引用数据类型的赋值操作,类引用变量存储的是对象的引用,两个变量之间的赋值就是将一个变量存储的对象引用赋给另一个变量,最终使得这两个变量引用同一个对象,因此此时无论通过哪一个引用变量来操作对象,都会影响到另一个引用变量所引用的对象。
注意:引用类型可进行赋值的条件是在赋值运算符“=”的左边的变量被显式声明的类型必须与“=”右边的变量的类型相同或有继承关系,否则编译出错。
例如:创建类A的两个对象并分别赋值给类型为A的两个变量,这样引用变量mya与myb就分别引用了两个对象,此时通过这两个引用变量来操作对象都不会影响到对方。
类A的代码如下:

public class A{
private String name; //定义一个String类型的成员变量
public void setName(String name){ //设置成员变量值的方法
this.name=name;
}
public String getName(){ //返回成员变量值的方法
return this.name;
}
}

创建类A的两个对象,并通过引用变量进行引用,然后通过引用变量来操作这两个对象,代码如下:

A mya = new A();//创建类A的一个对象,由变量mya进行引用
A myb = new A();//创建类A的另一个对象,由变量myb进行引用
mya.setName("a");//通过引用变量mya调用对象的setName()方法设置成员变量值为“a”
myb.setName("b");//通过引用变量myb调用对象的setName()方法设置成员变量值为“b”
System.out.println("mya.name:"+mya.getName());//通过变量mya调用被引用对象的getName()输出成员变量值
System.out.println("myb.name:"+myb.getName());//通过变量myb调用被引用对象的getName()输出成员变量值

运行结果如下:
mya.name:a
myb.name:b
下面对上面的代码进行修改,将变量myb赋给变量mya,修改代码如下:

A mya = new A();
A myb = new A();
mya.setName("a");
myb.setName("b");
mya = myb;//将引用变量myb赋值给引用变量mya
System.out.println("mya.name:"+mya.getName());
System.out.println("myb.name:"+myb.getName());
mya.setName("c");//通过引用变量mya调用所引用对象的setName()方法,设置成员变量值为“c”
System.out.println("mya.name:"+mya.getName());
System.out.println("myb.name:"+myb.getName());
myb.setName("d");//通过引用变量myb调用所引用对象的setName()方法,设置成员变量值为“d”
System.out.println("mya.name:"+mya.getName());
System.out.println("myb.name:"+myb.getName());

运行结果如下:
mya.name:b
myb.name:b
mya.name:c
myb.name:c
mya.name:d
myb.name:d
从结果可以看出,通过“mya = myb;”赋值操作后,引用变量mya与myb引用了同一个对象,因此通过其中任何一个变量来操作被引用的对象都会影响到另一个变量所引用的对象。
但在执行了“mya = myb;”表达式后,如果将一个引用变量赋值为null,即让该变量不引用任何对象,那么此时的另一个引用变量时不受影响的。
例如下面的代码,将变量myb赋值给变量mya后,再将mya赋值为null:

A mya = new A();
A myb = new A();
mya.setName("a");
myb.setName("b");
mya = myb;
System.out.println("mya.name:"+mya.getName());
System.out.println("myb.name:"+myb.getName());
mya = null; //将变量mya赋值为null,则mya不引用任何对象
System.out.println("myb.name:"+myb.getName());

运行结果如下:
mya.name:b
myb.name:b
myb.name:b
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值