JAVA基本數據類型、引用數據類型-參數傳遞詳解

1:基本類型的參數傳值

對於基本數據類型,修改這個值並不會影響做爲參數傳進來的那個變量,由於你修改的是方法的局部變量,是一個副本。實參的精度級別應等於或低於形參的精度級別,不然報錯。數組

class JB{
    void f(int x, int y){
        x=x+1;
        y=y+1;
        System.out.printf("參數x和y的值分別是:%d, %d\n", x, y);
    }
}
public class CS {
    public static void main(String[] arg){
        int x=10;
        int y=12;
        JB jb=new JB();
        jb.f(x, y);  
        System.out.printf("main方法中x和y的值分別是:%d, %d\n", x, y);
    }
}
結果:
參數x和y的值分別是:11, 13 main方法中x和y的值分別是:10, 12

2:引用類型的參數傳值

引用類型包括類、數組以及後面將要學習的接口。當形參是引用類型時,實參傳給形參的值是對象的引用。若是修改形參引用的對象,那麼實參引用的對象也會發生一樣的變化。由於實參的引用拷貝給了形參,因此實參和形參引用同一個對象,對形參引用對象的修改就至關於對實參引用對象的修改。學習

若是修改的不是形參引用的對象而是形參值自己,也就是讓形參指向其它對象,則實參值和實參引用的對象都不改變。spa

class A{
    int N;
    A(int n){
        N = n;
    }
    void setN(int n){
        N = n;
    }
    int getN(){
        return N;
    }
}
class A2 extends A{

    A2(int n) {
        super(n);
    }
}
class B{
    void f(A a){
        a.setN(12);
//        a = new A2(111);
        System.out.println("在執行方法f時, 形參a修改了本身的N值");
        System.out.println("當前形參mouse的N值: " + a.getN());
    }
}

main


B b = new B();
        A a = new A(2);
        System.out.println("在調用方法f以前,實參a的N值: "+ a.getN());
        b.f(a);
        System.out.println("在調用方法f以後, 實參a的N值: " + a.getN());
結果:

在調用方法f以前,實參a的N值: 2
在執行方法f時, 形參a修改了本身的N值
當前形參a的N值: 12
在調用方法f以後, 實參a的N值: 12

注意:形參指向其它對象這句話的理解,a = new A2(111);讓mouse又指向了另外一個對象,因此他所修改後的值和實參沒有關係,實參的值和引用都不會改變。在代碼中新加入的A2就是繼承了A,經過方法傳入的是A(a)的對象的引用,把a = new A2(111);那麼以後改變是A2的內容,和A就無關了,因此A(實參)的引用對象和值都不變。code

結果:對象

在執行方法f時, 形參a修改了本身的N值
當前形參a的N值: 111
在調用方法f以後, 實參a的N值: 2
相關文章
相關標籤/搜索