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
i, o
B.
a, e
o, o
o, o
C.
e, e
I, o
I, o
D.
e, e
o, o
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'。