這個問題在這里已經有了答案: 字串物件和字串文字之間的區別 [重復] 13 個答案 2天前關閉。
鑒于此示例代碼:
class basic {
public static void main(String[] args) {
String s1 = "Java";
String s2 = new String("Java");
}
}
是s1和s2物件的兩個參考變數?這兩行代碼做同樣的事情嗎?
uj5u.com熱心網友回復:
第 3、4 行不做同樣的事情,如:
String s1 = "Java";可以重用字串常量池中的一個實體(如果可用),而new String("Java");創建一個新的且在參考上不同的 String 物件實體。
因此,第 3 行和第 4 行不做同樣的事情。
現在,讓我們看看下面的代碼:
String s1 = "Java";
String s2 = "Java";
System.out.println(s1 == s2); // true
s2 = new String("Java");
System.out.println(s1 == s2); // false
System.out.println(s1.equals(s2)); // true
==對兩個參考型別進行參考標識比較。兩個相等的物件不一定==。通常,==在參考型別上使用是錯誤的,大多數時候equals需要改為使用。
uj5u.com熱心網友回復:
使用 new 關鍵字初始化 StringString s2 = new String("Java");會在記憶體堆中創建一個新物件。通過這種方法初始化的字串是可變的,意思是說字串的值可以在初始化后重新賦值。
然而,String s1 = "Java"使用 Literal 的直接 String 初始化會在記憶體池區域中創建一個物件。通過 Literal 創建的字串不會創建新物件。它只是將參考傳遞給較早創建的物件。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/407634.html
標籤:
