先看代码
public class Main {
public static void main(String[] args) {
Person person1 = new Person();
PersonWrapper person1Wrapper = new PersonWrapper(person1);
System.out.println(person1.toString());// Person@4554617c
System.out.println(person1Wrapper.person.toString());// Person@4554617c
//分别改变包装类和本类的对象引用
changePerson(person1);
changePersonWrapper(person1Wrapper);
System.out.println(person1.toString());// Person@4554617c
System.out.println(person1Wrapper.person.toString());//Person@74a14482 指针发生了改变
}
private static void changePersonWrapper(PersonWrapper personWrapper) {
personWrapper.person = new Person();
}
private static void changePerson(Person person){
person = new Person();
}
}
class Person{}
//包装Person类
class PersonWrapper{
public Person person;
public PersonWrapper(Person person){
this.person = person;
}
}
这里我们是通过实现一个对Person本身的包装类,来通过方法实现对于对象内部字段和引用的改变。
这个方法可以实现,但是我不太清楚内部的实现方式,有知道的话可以告诉我一下,谢谢