String foo = "bar"
和
String foo = new String("bar")
之間的區別在於,第一個不創建一個新的String
對象,而是,它在現有的String
值將查找值你已經創建。這被稱爲實習價值。這節省了內存。
關鍵字new
爲您創建的String對象分配了新的內存。
public class StringInternExample {
public static void main(String[] args) {
String foo1 = "bar";
String foo2 = "bar";
String foo3 = new String("Hello, Kitty");
String foo4 = new String("Hello, Kitty");
if(foo1 == foo2){ // compare addresses. Same address = no new memory assigned
System.out.println("No new memory has been assigned for foo2");
}
if(!(foo3 == foo4)){ // compare addresses. Different addresses = new memory
System.out.println("New Memory has been assigned for foo4");
}
}
}
另請注意,java命名約定規定變量名稱應以小寫字符開頭。 –
但是這個代碼在兩個版本中都起作用。結果是一樣的。那有什麼區別? – Ernusc
閱讀重複的問題 –