java 不重复字符串_避免使用Java中的重复字符串

如果你真的有问题,实习将是正确的解决方案. Java在内部池中存储字符串文字和许多其他字符串,每当要创建新的字符串时,JVM首先检查字符串是否已在池中.如果是,则不会创建新实例,而是将引用传递给实体化String对象.

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

String interned = String.intern(aString); // returns a reference to an interned String

String notInterned = new String(aString); // creates a new String instance (guaranteed)

也许,库真的为所有xml属性值创建了新实例.这是可能的,您将无法更改它.

实习生具有全球影响力.一个实习的字符串立即“可用于任何对象”(这个视图实际上没有意义,但它可能有助于理解它).

所以,假设我们在Foo类中有一行,方法愚蠢:

String s = "ABCD";

字符串文字立即被实习. JVM检查,如果“ABCD”已经在池中,如果没有,“ABCD”存储在池中. JVM将对interned String的引用分配给s.

现在,也许在另一个类Bar中,在方法栏中:

String t = "AB"+"CD";

然后JVM将像上面一样实习“AB”和“CD”,创建连接的String,看看,如果它已经是intered,嘿,是的,并且将对interned String“ABCD”的引用分配给t.

调用“PROD”.intern()可能会起作用或失败.是的,它将实习字符串“PROD”.但是有一个机会,jibx真的为属性值创建了新的字符串

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

在这种情况下,value将不会引用一个interned String(即使“PROD”在池中),而是对堆上的新String实例的引用.

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值