Given:



public class Vowel {

    private char var;

    public static void main(String[] args) {
        char var1 = 'a';
        char var2 = var1;
        var2 = 'e';

        Vowel obj1 = new Vowel();
        Vowel obj2 = obj1;
        obj1.var = 'i';
        obj2.var = 'o';
        System.out.println(var1 + ", " + var2);
        System.out.println(obj1.var + ", " + obj2.var);
    }
}

A.

a, e
i, o

B.

a, e
o, o

C.

e, e
I, o

D.

e, e
o, o

題解

這裡是考Java永遠為「pass by value」的觀念。

var1和var2是基本型別變數,直接儲存資料的數值;而var是物件參考變數,儲存物件的參考(Reference),類似記憶體位址的值。在傳遞變數的過程中,Java只會傳遞變數的「值」。

第6~8行,var1一開始儲存'a',然後var1再將'a'傳給var2儲存,最後再讓var2儲存'e'這個值。所以此時var1存的是'a',var2存的是'e'。

第10~11行,obj1指到一個新實體化的Vowel物件,接著再將這個物件的參考也讓obj2儲存。所以此時obj1和obj2這兩個變數所指到的物件是同一個。

第12~13行,只是在修改同一個Vowel物件的var變數,最後Vowel物件的var變數存的值為'o'。