避免在Java中使用重复的字符串

避免在Java中使用重复的字符串,第1张

避免在Java中使用重复的字符串

__如果您确实有问题,那么 实习 是正确的解决方案。Java将String文字和许多其他String存储在内部池中,并且每当
创建新的String时,JVM都会首先检查该String是否已在池中。如果是,它将不会创建新实例,而是将引用传递给 被嵌入的 String对象。

有两种方法可以控制此行为:

String interned = String.intern(aString); // returns a reference to an interned StringString notInterned = new String(aString); // creates a new String instance (guaranteed)

因此, 也许 这些库确实为所有xml属性值创建了新实例。这是可能的,您将无法更改。


实习生 具有全球影响力。可以立即对“任何对象”使用一个Interned String(此视图实际上没有任何意义,但可能有助于理解它)。

因此,假设我们在class

Foo
,method中有一行
foolish

String s = "ABCD";

字符串文字立即被插入。JVM检查池中是否已经有“ ABCD”,如果没有,则将“ ABCD”存储在池中。JVM将对内部字符串的引用分配给

s

现在,也许在另一个类

Bar
的方法中
barbar

String t = "AB"+"CD";

然后,JVM将像上面那样实习“ AB”和“ CD”,创建串联的String,看一下(如果已经被嵌入),嘿,是的,并将对嵌入的字符串“
ABCD”的引用分配给

t


呼叫

"PROD".intern()
可能成功或失败。是的,它
实习生字符串
"PROD"
。但是,jibx确实有可能使用以下命令为属性值创建新的字符串:

String value = new String(getAttributevalue(attribute));

在这种情况下, value 不会引用内部String(即使

"PROD"
在池中),而是引用堆上的新String实例。

而且,对于命令中的另一个问题:这仅在运行时发生。编译仅创建类文件,字符串池是对象堆上的数据结构,并且由JVM使用,执行应用程序。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5501548.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-13
下一篇 2022-12-12

发表评论

登录后才能评论

评论列表(0条)

保存