java中的String類是在java.lang包中定義的,它正是類而不是像int或boolean這樣的原語。
字符串的開發,以提供與衆多人物ANS操作中,幾乎所有的Java應用程序
關於Java和字符串一些有趣的事實是commmonly使用:
字符串中的不可變的,最後在Java中,在這種情況下, JVM使用字符串池來存儲所有的String對象。
什麼是不同的方式來創建字符串對象?
我們可以使用新運算符創建String對象,就像任何普通的java類一樣,或者我們可以使用雙引號(文字賦值)來創建一個String對象。
有在String類可從字符數組,字節數組,StringBuffer的和StringBuilderetc等
你的問題得到字符串太幾個構造函數:
當我們使用雙引號創建一個字符串,JVM在字符串池中查找是否有其他字符串以相同的值存儲。如果找到,它只是返回對該String對象的引用,否則它會創建一個具有給定值的新String對象並將其存儲在String池中。
當我們使用new運算符時,JVM將創建String對象,但不會將其存儲到String Pool中。我們可以使用intern()方法將String對象存儲到String池中,或者如果池中已存在一個具有相等值的String,則返回引用。
所以,當你做
String s1 = "abc";
String s2 = "abc";
那些在StringPool檢查,因爲S1已經存在那裏,S2將採取相同的參考,因此,S1 S2 ==是真實的。
但是當你這樣做:
String s3 = new String("abc");
String s4 = new String("abc");
您使用的是新的運營商,所以JVM不檢查,如果有一個字符串已在堆中,它只是分配一個新空間對於s4,s3 == s4也是如此當然不。
請查看下面的圖片以獲取更多說明示例。
因爲你沒有以正確的方式比較它們。 http://stackoverflow.com/questions/513832/how-do-i-compare-strings-in-java –
請參閱此問題http://stackoverflow.com/questions/2486191/what-is-the-java-string -pool-and-how-is-s-different-from-new-strings –
字符串應該使用Java中的equals()方法進行比較。但是,是的,你的問題是關於'字符串池'。 – mzy