String java = new StringBuilder("ja").append("va").toString();
String good = new StringBuilder("go").append("od").toString();
System.out.println(java.intern() == java); // false
System.out.println(good.intern() == good); //true
uj5u.com熱心網友回復:
查下intern()方法你就知道了,你用.equals試下uj5u.com熱心網友回復:
看JDK版本uj5u.com熱心網友回復:
java早已近內置在JVM了uj5u.com熱心網友回復:
關鍵詞java 已經存在了,這個沒必要多研究。
uj5u.com熱心網友回復:
https://blog.csdn.net/yanghan1222/article/details/80155711uj5u.com熱心網友回復:
氣死我了,上才藝!!String java = new StringBuilder("ja").append("va").toString();
System.out.println(java == "java");結果為false,雖然兩個String里面的內容都是一樣的,但是它們并不是一個物件。這個是基礎的東西,應該能知道為什么不相等吧!什么,不知道?那我還是說一下吧,理解了這個才能解決問題。
String str1 = new StringBuilder("ja").append("va").toString(); // 這是創建了一個新的String物件
String str2 = "java"; // 使用了字面常量,系統會先從物件池找有沒有"java"物件,有的話直接回傳,沒有的話就創建一個,并放到物件池中,然后回傳這個物件
String str3 = new String("java"); // 這里也使用到了"java"字面常量,它的程序跟str2一樣。接著new String("java")使用"java"物件又創建出了一個新的String物件,所以這一行代碼會產生兩個物件。
這里str1和str2和str3是三個不同的物件,如果你用==比較肯定都是false。OK,基礎講解完畢,接下來就很容易理解你說的問題為什么會那樣了。
String str = new String("java");
System.out.println(str == str.intern()); // false為什么是false,這時就要先看intern()方法的檔案說明:
看關鍵點:”當呼叫 intern 方法時,如果池已經包含一個等于此 String 物件的字串(該物件由 equals(Object) 方法確定),則回傳池中的字串“。
這說明在物件池中,本來就存在一個"java"物件了,java.intern()回傳的是物件池中的物件,而你的java物件是一個新new的物件,兩個物件肯定也不相等啊。
換成good試一下:
String str = new String("good");
System.out.println(str == str.intern()); // false也是false,為什么是false這里就不用多說了吧,奇怪的是,為什么你上面的good輸出為true呢?
String str = new StringBuilder("go").append("od").toString();
System.out.println(str == str.intern()); // true這里結果為true說明了什么??說明了物件池里回傳的物件和str物件是同一個,但是str物件明明是剛new出來的呀,說明str.intern()的時候,物件池里沒有與str相等的物件,所以就把str放到物件池,然后回傳str物件,所以肯定相等啊。
再來看new String("good")不相等的情況:
String str = new String("good"); // 使用了"good"字面常量,物件池里沒有這個物件,則把這個物件放到池里,然后使用"good"又創建出一個新的str物件,這里str和池里的"good”并不是同一個物件哦!
System.out.println(str == str.intern()); // false,str.intern()的時候,池里已經有"good"物件,它和str不是同一個,所以結果為false
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/72977.html
標籤:Java SE
上一篇:如何將同一資料表中某個欄位的值放到jsp比較并把比較結果傳到另一頁面
下一篇:在撰寫jsp時出現漢字傳遞錯誤
