淘先锋技术网

首页 1 2 3 4 5 6 7

在Java中,引用是对象的一个别名。在进行编程时,有时需要创建一个新对象,并将其作为另一个对象的副本或修改副本的副本。这就涉及到了浅引用和深引用。

浅引用是指引用的对象将指向原来对象相同的地址,即指向同一个对象的指针。这意味着如果原始对象改变了,那么引用对象也会改变。在Java中,当使用等号创建一个新的对象引用时,就会发生浅拷贝。

//浅引用示例
public class Person{
int age;
String name;
public Person(int age, String name){
this.age = age;
this.name = name;
}
}
Person p1 = new Person(20, "John");
Person p2 = p1;
p1.age = 25;
System.out.println(p2.age); // 输出25

而深引用则是指引用的对象指向一个新的对象地址,即引用对象和原始对象是两个独立的对象。这意味着当原始对象改变时,引用对象不会改变。在Java中,深拷贝需要使用clone()方法。

//深引用示例
public class Person implements Cloneable{
int age;
String name;
public Person(int age, String name){
this.age = age;
this.name = name;
}
public Object clone(){
try{
return super.clone();
}catch(Exception e){
return null;
}
}
}
Person p1 = new Person(20, "John");
Person p2 = (Person) p1.clone();
p1.age = 25;
System.out.println(p2.age); // 输出20

在实际编程中,需要视情况选择使用浅引用还是深引用。如果操作的是不可变对象,则可以使用浅引用,而如果要操作可变对象,则需要使用深引用,否则可能会出现意想不到的结果。