如果我创建一个字符串对象
String s=new String("Stackoverflow");
将只在堆中创建 String 对象,或者也在 String 常量池中创建一个副本。
提前致谢。
如果调用,则只能将字符串放入常量池中intern
或使用字符串文字,据我所知。
任何时候你打电话new String(...)
你只得到一个普通的新的String
对象,无论您调用哪个构造函数重载。
就你而言,你还要确保is一个包含内容的字符串"Stackoverflow"
在常量池中,事实上您正在使用字符串文字 - 但如果它已经存在,则不会添加另一个字符串文字。因此,将其分开:
String x = "Stackoverflow"; // May or may not introduce a new string to the pool
String y = new String(x); // Just creates a regular object
此外,调用的结果new String(...)
将始终是与所有先前引用不同的引用 - 与字符串文字的使用不同。例如:
String a = "Stackoverflow";
String b = "Stackoverflow";
String x = new String(a);
String y = new String(a);
System.out.println(a == b); // true due to constant pooling
System.out.println(x == y); // false; different objects
最后,我一直不清楚何时将字符串添加到常量池中,这对我来说也不重要。我猜是的might在类加载上(该类使用的所有字符串常量,立即加载),但它可能是在每个方法的基础上。可以使用以下方法找出一个特定的实现intern()
,但这对我来说从来都不是非常重要:)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)