如何解决Java 字符数组转字符串而不创建新对象
创建这样的字符串时:
String s1 = “ABC”
如果“ABC”存在,JVM 将在字符串池中查找,并且仅当“ABC”不存在时才创建一个新对象。
所以使用
String s1 = new String("ABC")
停止这种行为并且每次都会创建一个对象。
现在我在将字符数组转换为字符串时遇到问题:
private char[] names;
...
@Override
public String toString() {
return new String(this.names);
}
这将始终创建一个新对象。我可以在不每次都创建新对象的情况下将 char 数组转换为 String 吗?
解决方法
我知道没有办法避免在您的 String
中创建 toString()
对象,但是您可以通过显式调用 String.intern()
:
@Override
public String toString() {
return new String(this.names).intern();
}
您可以通过反复检查 myObject.toString() == myObject.toString()
来测试它。
但在此之前,请帮自己一个忙并be aware of what you're doing。生成字符串对象可能是更好的选择,这取决于您这样做的主要原因。
,如果您的目标是减少内存使用,您还可以考虑您通常存储在 char[] names
中的内容,以及您如何在示例中未显示的其他代码中操作该成员字段。从 char[]
切换到 String
可能会减少内存。
Java 9 引入了紧凑字符串,与需要 UTF16 的字符串相比,它减少了拉丁语 String
的内部存储空间。因此,在某些情况下,new String(this.names)
使用比 char[] names
更少的内存,因为它存储相同字符的 byte[]
表示 - 尽管这会导致 String
的额外对象的开销。但是,对于访问 names
的其他操作,String 可能不适合表示,尤其是在您需要调用 toCharArray()
以恢复原始格式以使应用程序像以前一样工作时。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。