天天看點

java為基本類型和對象的引用采用的是“值調用”機制

class Test {

    static StringBuffer sb1 = new StringBuffer("A");

    static StringBuffer sb2 = new StringBuffer("B");

    public static void main(String args[]) {

        Test h = new Test();

        h.methodA(sb1, sb2);

        System.out.println(sb1 + "," + sb2);

    }

    public void methodA(StringBuffer x, StringBuffer y) {

        y.append(x);

        x = y;

    }

}

輸出為A,BA

x=y;隻是讓句柄x指向了y所指向的對象,并不是将x所指向的對象指派為"BA",也就是說這句隻是讓x句柄轉了指向

A method cannot modify a parameter of primitive type (that is, numbers or Boolean values).

A method can change the state of an object parameter.

A method cannot make an object parameter refer to a new object.

在JAVA當中沒有所謂的位址傳遞,隻有值傳遞一種方式。我們來看看代碼

static StringBuffer sb1=new StringBuffer("A");

static StringBuffer sb2=new StringBuffer("B");

sb1-->"A";  sb2-->"B";

在methodA方法調用中

h.methodA(sb1,sb2);

sb1-->x, sb2-->y

那麼x-->"A";  y-->"B";

public void methodA(StringBuffer x,StringBuffer y) {

    y.append(x);//相當于sb2.append(sb1),sb2所引用的StringBuffer對象已經改變。

                //即sb2=y-->"BA"

    x=y;//x-->"BA";但是由于在JAVA當中隻有值傳遞一種方式,sb1根本沒有改變,是以sb1-->"A";

}

最後System.out.println(sb1+","+sb2);

得到了結果:A,BA