栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

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

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

避免在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使用,执行应用程序。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/509157.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号