關於java的物件引數傳遞的理解!
阿新 • • 發佈:2021-01-10
如果傳遞的是普通的資料型別,那麼傳遞的就是值的拷貝,內外互不影響。
1.如果傳遞的是類物件,傳遞的方式就類似於指標,事實上也可以說是拷貝,不過拷貝的是地址,也就是類似於傳遞的是地址。
傳遞的引數類似於一個指向外邊類物件地址的指標,通過這個指標,就可以修改函式外類物件的資料。
package consumer;
class nu{
public int flag=1;
}
public class test2 {
static void add(nu s){
s.flag++;
System.out.println( s.flag);
}
public static void main(String[] args) {
nu a=new nu();
add(a);
System.out.println(a.flag);
}
}
2.但是,如果在函式內讓這個區域性變數(指標)指向其他地址,並不會改變函式外類物件的指向。
package consumer;
class nu{
public int flag=1;
}
public class test2 {
static void add(nu s){
s= new nu();
s.flag++;
System.out.println(s.flag);
}
public static void main(String[] args) {
nu a=new nu();
add(a);
System.out.println(a.flag);
}
}
分析:
第一個例子,函式裡的引數s指向外部的類物件a,所以可以一直操作該物件。
第二個例子,函式裡s=new nu();直接讓引數s指向了一個新的地址,接下來的操作操作的都是這個新地址的物件,和外邊的物件a沒關係。
也就是說,如果傳遞的是類物件,只要不修改引數的指向,就可以在函式內通過操作地址修改函式外類物件的資料。
感覺和C++的指標傳遞一模一樣;
如果覺得我的理解有誤,歡迎指出!