引用和內存考題

public class Square {  
    long width;  
    public Square(long l) {   
        width = l;  
    }  
    public static void main(String arg[]) {   
        Square a, b, c;  
        a = new Square(42L);   
        b = new Square(42L);   
        c = b;   
        long s = 42L;  
    } 
}

 

解答:html

這題考的是引用和內存。
//聲明瞭3個Square類型的變量a, b, c
//在stack中分配3個內存,名字爲a, b, c
Square a, b, c; 
//在heap中分配了一塊新內存,裏邊包含本身的成員變量width值爲48L,而後stack中的a指向這塊內存
a = new Square(42L);
//在heap中分配了一塊新內存,其中包含本身的成員變量width值爲48L,而後stack中的b指向這塊內存
b = new Square(42L);   
//stack中的c也指向b所指向的內存
c = b;
//在stack中分配了一塊內存,值爲42
long s = 42L;

來看4個選項:java

A: a == bthis

由圖能夠看出a和b指向的不是同一個引用,故A錯spa

B:s == acode

一個Square類型不能與一個long型比較,編譯就錯誤,故B錯htm

c:b == cblog

由圖能夠看出b和c指向的是同一個引用,故C正確內存

d:a equal s源碼

程序會把s封裝成一個Long類型,因爲Square沒有重寫Object的equals方法, 因此調用的是Object類的equals方法,源碼以下編譯

public boolean equals(Object obj) {
     return (this == obj);
}

其實就是判斷兩個引用是否相等,故D也錯誤。

相關文章
相關標籤/搜索