錯誤修訂:SCJP認證套題解析之二第40題 (轉)

worldblog發表於2007-12-12
錯誤修訂:SCJP認證套題解析之二第40題 (轉)[@more@]

40: String s= "hello"; String t = "hello"; char c[] = {'h','e','l','l','o'} ; Which return true? A. s.equals(t); B. t.equals(c); C. s==t; D. t.equals(new String("hello")); E. t==c. (acd) 題目:哪些返回true。這個在前面第10題的equals()方法和==運算子的討論中論述過。==運算子比較的是運算子兩端的運算元是否是同一個,而String的equals()方法比較的是兩個String物件的內容是否一樣,其引數是一個String物件時才有可能返回true,其它物件都返回假。需要指出的是由於s和t並非使用new建立的,他們指向池中的同一個字串常量,因此其地址實際上是相同的(這個可以從反編譯一個簡單的測試的結果得到,限於篇幅不列出測試程式碼和反編譯的分析),因此答案c也是正確的。(文章原來漏選答案C,現在增加並修改分析),以下是測試程式碼和反編譯分析: public class Tests { public static void main(String[] args) { String s= "hello"; String t = "hello"; if (s.equals(t)) { System.out.println("Hello World!"); } } } 反編譯的關鍵摘錄: Method void main(.lang.String[]) 0 ldc #2 2 astore_1 3 ldc #2 5 astore_2 6 aload_1 從標記為0和3的兩條可以看出s和t指向的記憶體地址相同,程式執行結果也證明此結論。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-991719/,如需轉載,請註明出處,否則將追究法律責任。

相關文章