JAVA中基本数据类型的引用与对象赋值的区别

  在JAVA 程序中我们往往需要给对象进行赋值操作,但是对于不同数据类型的赋值是有区别的,比如:对基本数据类型的赋值并非指向一个对象的引用,所以在为其赋值的时候是直接将一个地方的值复制到另一个地方,所以对于基本数据类型a=b的操作是将b的内容复制给a,此时如果修改a的内容,b的内容是不会受到a修改的影响的;

然而在为对象进行赋值时却是不同的,对一个对象进行操作时,我们实际上是对对象的引用,假如我们将一个对象赋值给另一个对象,实际上将“引用”从一个地方复制到另一个地方,因此赋值后的两个对象其实都指向的是同一对象(即等号右边引用所指向的对象;

下面举一个例子来进行说明:


比如有一个Pserson类

public class Person {
  private Integer age;
  private String name;
  
 public Person(Integer age,String name){
 this.age=age;
 this.name=name;
  }
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
   
}

创建测试类Test

public class Test {
public static void main(String[] args) {
Person p1=new Person(10,"zhangsan");
Person p2=new Person(20,"lisi");
System.out.println("-------开始时p1,p2对象的值-----------");
System.out.println("p1.age:"+p1.getAge()+"----p1.name:"+p1.getName());
System.out.println("p1.age:"+p2.getAge()+"----p1.name:"+p2.getName());
//将p2对象赋值给p1
p1=p2;
System.out.println("-----对象赋值后-----------");
System.out.println("p1.age:"+p1.getAge()+"----p1.name:"+p1.getName());
System.out.println("p1.age:"+p2.getAge()+"----p1.name:"+p2.getName());

//修改p1对象的值
p1.setAge(15);
p1.setName("wangwu");
System.out.println("-----查看修改p1对象的值后p2对象的变化-----");
System.out.println("p1.age:"+p1.getAge()+"----p1.name:"+p1.getName());
System.out.println("p1.age:"+p2.getAge()+"----p1.name:"+p2.getName());

}
}


执行结果:

p1.age:10----p1.name:zhangsan
p1.age:20----p1.name:lisi
-----对象赋值后-----------
p1.age:20----p1.name:lisi
p1.age:20----p1.name:lisi
-----查看修改p1对象的值后p2对象的变化-----
p1.age:15----p1.name:wangwu
p1.age:15----p1.name:wangwu


发现在p2给p1赋值后两个对象是一样的,其实他们现在指向的是同一个对象了;

在对p1进行修改后随之p2在获取对象的属性时也跟着变化了

猜你喜欢

转载自blog.csdn.net/xiongmaodeguju/article/details/54409495