1. 程式人生 > 其它 >關於java的物件引數傳遞的理解!

關於java的物件引數傳遞的理解!

技術標籤:基礎計算機

如果傳遞的是普通的資料型別,那麼傳遞的就是值的拷貝,內外互不影響。

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++的指標傳遞一模一樣;

如果覺得我的理解有誤,歡迎指出!