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(java.lang.String[]) 0 ldc #2 <String "hello"> 2 astore_1 3 ldc #2 <String "hello"> 5 astore_2 6 aload_1 從標記爲0和3的兩條可以看出s和t指向的內存地址相同,程序運行結果也證明此結論。
錯誤修訂:SCJP認證套題解析之二第40題
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.