下面这两个语句有什么区别?
String s = "text";
String s = new String("text");
原文由 user368141 发布,翻译遵循 CC BY-SA 4.0 许可协议
下面这两个语句有什么区别?
String s = "text";
String s = new String("text");
原文由 user368141 发布,翻译遵循 CC BY-SA 4.0 许可协议
字符串 文字 将进入 String Constant Pool 。
下面的快照可能会帮助您 直观 地理解它,以便更长时间地记住它。
逐行创建对象:
String str1 = new String("java5");
在构造函数中使用字符串文字“java5”,将一个新的字符串值存储在字符串常量池中。使用 new 运算符,在堆中创建一个新的字符串对象,并将“java5”作为值。
String str2 = "java5"
引用“str2”指向字符串常量池中已经存储的值
String str3 = new String(str2);
在堆中创建一个新的字符串对象,其值与“str2”引用的值相同
String str4 = "java5";
引用“str4”指向字符串常量池中已经存储的值
总对象:堆 - 2,池 - 1
原文由 Braj 发布,翻译遵循 CC BY-SA 3.0 许可协议
15 回答8.4k 阅读
8 回答6.2k 阅读
1 回答4k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答3.1k 阅读
2 回答3.8k 阅读
3 回答1.7k 阅读✓ 已解决
new String("text");
显式创建一个新的和引用不同的实例String
对象;String s = "text";
如果可用,可以重用 字符串常量池中 的一个实例。您 很少 会想要使用
new String(anotherString)
构造函数。从 API:相关问题
参照区分是什么意思
检查以下片段:
==
对两个引用类型进行引用标识比较。equals
的两个对象不一定是==
。在引用类型上使用==
通常是错误的;大多数时候equals
需要改用。尽管如此,如果出于某种原因您需要创建两个
equals
而不是==
字符串,您 可以 使用new String(anotherString)
构造函数。然而,需要再次说明的是,这是 非常 奇特的,而且很少是本意。参考
class Object
-boolean Object(equals)
相关问题