先看代碼
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本身的包裝類,來通過方法實現對於對象內部字段和引用的改變。
這個方法可以實現,但是我不太清楚內部的實現方式,有知道的話可以告訴我一下,謝謝