当像这样创建一个字符串时:
String s1 = “ABC”
如果“ABC”存在,JVM 将在字符串池中查找,只有当“ABC”不存在时才创建一个新对象。
所以用法
String s1 = new String("ABC")
停止此行为并每次都会创建一个对象。
现在我在将 char 数组转换为 String 时遇到问题:
private char[] names;
...
@Override
public String toString() {
return new String(this.names);
}
这将始终创建一个新对象。我可以从 char 数组转换为 String 而无需每次都创建一个新对象吗?
最佳答案
我知道没有办法避免在你的 toString()
中创建一个 String
对象,但是你可以避免保留这些新字符串(除了第一个之外的所有字符串都符合条件用于方法执行后的 GC)通过显式调用 String.intern()
:
@Override
public String toString() {
return new String(this.names).intern();
}
您可以通过反复检查 myObject.toString() == myObject.toString()
来测试它。
但在这样做之前,请帮自己一个忙 be aware of what you're doing .生成字符串对象可能是更好的选择,具体取决于您这样做的主要原因。
关于Java char数组到String而不创建新对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68223952/