Given:
class X {
static int i;
int j;
public static void main(String[] args) {
X x1 = new X();
X x2 = new X();
x1.i = 3;
x1.j = 4;
x2.i = 5;
x2.j = 6;
System.out.println(
x1.i + " "
+ x1.j + " "
+ x2.i + " "
+ x2.j);
}
}
What is the result?
A.
3 4 5 6
B.
3 4 3 6
C.
5 4 5 6
D.
3 6 4 6
題解
第7~8行,宣告並實體化出了x1和x2這兩個X物件。X物件的變數成員有物件變數j,和宣告時用了static修飾的靜態(類別)變數i。兩種變數的差別在於,類別變數只會有一個存在,其記憶體空間並不會因為類別被實體化而多產生出來,也就是說,x1和x2的i變數是同一個變數,實際指到的記憶體空間是一樣的。
第9~12行,將不同的值指派給x1和x2物件的變數i和變數j。由於變數i是類別變數,因此「x1.i」和「x2.i」都可以改寫成「X.i」。
所以到最後,X.i為5,而x1.j為4、x2.j為6,輸出結果為「5 4 5 6」。