2 回答

TA貢獻(xiàn)1784條經(jīng)驗(yàn) 獲得超9個(gè)贊
new String("text");
?顯式創(chuàng)建一個(gè)新的和引用不同的String
對(duì)象實(shí)例;?String s = "text";
可以重用字符串常量池中的實(shí)例(如果有)。
你很少想要使用new String(anotherString)
構(gòu)造函數(shù)。來自API:
String(String original)
:初始化新創(chuàng)建的?String
對(duì)象,使其表示與參數(shù)相同的字符序列;?換句話說,新創(chuàng)建的字符串是參數(shù)字符串的副本。除非需要顯式的原始副本,否則不需要使用此構(gòu)造函數(shù),因?yàn)樽址遣豢勺兊摹?/p>
什么參考區(qū)別意味著什么
檢查以下代碼段:
????String?s1?=?"foobar"; ????String?s2?=?"foobar"; ????System.out.println(s1?==?s2);??????//?true ????s2?=?new?String("foobar"); ????System.out.println(s1?==?s2);??????//?false ????System.out.println(s1.equals(s2));?//?true
==
兩種引用類型是引用標(biāo)識(shí)比較。兩個(gè)equals
不一定的對(duì)象==
。==
在引用類型上使用通常是錯(cuò)誤的;?大部分時(shí)間都equals
需要使用。
盡管如此,如果出于某種原因需要?jiǎng)?chuàng)建兩個(gè)equals
但不是==
字符串,則可以使用new String(anotherString)
構(gòu)造函數(shù)。然而,需要再說一遍,這是非常奇特的,很少是意圖。

TA貢獻(xiàn)1780條經(jīng)驗(yàn) 獲得超4個(gè)贊
字符串文字將進(jìn)入字符串常量池。
下面的快照可能會(huì)幫助您直觀地理解它以便記住它更長的時(shí)間。
逐行創(chuàng)建對(duì)象:
String str1 = new String("java5");
在構(gòu)造函數(shù)中使用字符串文字“java5”,新的字符串值存儲(chǔ)在字符串常量池中。使用new運(yùn)算符,在堆中創(chuàng)建一個(gè)新的字符串對(duì)象,并將“java5”作為值。
String str2 = "java5"
引用“str2”指向字符串常量池中已存儲(chǔ)的值
String str3 = new String(str2);
在堆中創(chuàng)建一個(gè)新的字符串對(duì)象,其值與“str2”引用的值相同
String str4 = "java5";
引用“str4”指向字符串常量池中已存儲(chǔ)的值
總對(duì)象:堆 - 2,池 - 1
添加回答
舉報(bào)