亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

“text”和new String(“text”)之間有什么區別?

“text”和new String(“text”)之間有什么區別?

holdtom 2019-05-29 16:20:37
“text”和new String(“text”)之間有什么區別?這兩個陳述之間有什么區別?String s = "text";String s = new String("text");
查看完整描述

2 回答

?
千萬里不及你

TA貢獻1784條經驗 獲得超9個贊

new String("text");?顯式創建一個新的和引用不同的String對象實例;?String s = "text";可以重用字符串常量池中的實例(如果有)。

很少想要使用new String(anotherString)構造函數。來自API:

String(String original):初始化新創建的?String對象,使其表示與參數相同的字符序列;?換句話說,新創建的字符串是參數字符串的副本。除非需要顯式的原始副本,否則不需要使用此構造函數,因為字符串是不可變的。


什么參考區別意味著什么

檢查以下代碼段:

????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

==兩種引用類型是引用標識比較。兩個equals不一定的對象==。==在引用類型上使用通常是錯誤的;?大部分時間都equals需要使用。

盡管如此,如果出于某種原因需要創建兩個equals但不是==字符串,則可以使用new String(anotherString)構造函數。然而,需要再說一遍,這是非常奇特的,很少是意圖。


查看完整回答
反對 回復 2019-05-29
?
Helenr

TA貢獻1780條經驗 獲得超4個贊

字符串文字將進入字符串常量池。

下面的快照可能會幫助您直觀地理解它以便記住它更長的時間。



逐行創建對象:

String str1 = new String("java5");

在構造函數中使用字符串文字“java5”,新的字符串值存儲在字符串常量池中。使用new運算符,在堆中創建一個新的字符串對象,并將“java5”作為值。

String str2 = "java5"

引用“str2”指向字符串常量池中已存儲的值

String str3 = new String(str2);

在堆中創建一個新的字符串對象,其值與“str2”引用的值相同

String str4 = "java5";

引用“str4”指向字符串常量池中已存儲的值

總對象:堆 - 2,池 - 1

進一步閱讀Oracle社區


查看完整回答
反對 回復 2019-05-29
  • 2 回答
  • 0 關注
  • 894 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號