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