1. 程式人生 > >java跨方法傳遞物件引用變數,並對該變數賦值引起的問題

java跨方法傳遞物件引用變數,並對該變數賦值引起的問題

關於物件引用做方法引數問題,在java中 基本型別變數做引數傳另外一個方法中重新賦值時,會重新在棧中複製一份,物件引用也是一樣,如
public methodA(){
int i = 0;
methodB(i);
sysout(i);//此時i還是0,methodB中賦值部分的x相對於A已經是棧中新生成的變數名稱了。
}

methodB(int x){
x = x + 1;
}
誇方法傳物件引用也同理;
public methodA(){
Student s = null;
methodB(s);
sysout(s);//此時s還是null,methodB中賦值部分的s相對於A已經是棧中新生成的變數名稱了。但是如果在methodA中Student s = new Student();然後methodB中不對s賦值,只是改變s的屬性,那s指向還是methodA中new出的物件的,只是這個物件屬性改變而已。如果methodA中s=new Student(),但是methodB中還是對s進行賦值,s=new Student();,那麼此處sysout的還是methodA中new出的Student物件,而不是methodB中的物件。歸納,物件的引用變數

基本變數一樣,都在棧中,如果跨方法傳遞後重新賦值,則會在棧中拷貝生成新變數。對於引用變數,它重新賦值後雖然是指向了新生成的物件地址,但是引用變數本身也是拷貝的,原方法操作的卻是老的引用變數指向老的物件
}

methodB(Student s){
s = new Student();
}