java跨方法傳遞物件引用變數,並對該變數賦值引起的問題
阿新 • • 發佈:2019-01-04
關於物件引用做方法引數問題,在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();
}