Java中創建String的兩種方式差異
阿新 • • 發佈:2018-10-01
ima 分享 引用 永遠 bubuko 技術分享 方式 println print
我們知道創建一個String類型的變量一般有以下兩種方法:
String str1 = "abcd"; String str2 = new String("abcd");
那麽為什麽會存在這兩種創建方式呢,它們在內存中的表現形式各有什麽區別?
方法1:
String a = "abcd"; String b = "abcd"; System.out.println(a == b); // true System.out.println(a.equals(b)); // true
解析:
用""創建的a,b兩個字符串,==和equals比較返回都為true,這是因為a,b都指向了方法區的同一個字符串。所以,當同樣的一個字符串用""重復創建時只在方法區創建一次。
方法2:
String c = new String("abcd"); String d = new String("abcd"); System.out.println(c == d); // false System.out.println(c.equals(d)); // true
解析:
用new創建的c,d兩個字符串,equals為true很簡單因為equals永遠比較的是值,而==為false說明兩個字符串的引用不一樣。用new創建的字符串每次都會在JVM堆中創建,所以c,d都對應堆中的兩個不同的字符串。
關於這兩道題中的""和new創建的字符串在內存中的表現形式可以看下圖就明白了。
Java中創建String的兩種方式差異