java – 更改String后的字符串池
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – 更改String后的字符串池,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1527字,纯文字阅读大概需要3分钟。
内容图文
![java – 更改String后的字符串池](/upload/InfoBanner/zyjiaocheng/786/28bbf38894474794ac95d9a9191bb685.jpg)
我有这个代码
String a="test";
String b="test";
if(a==b)
System.out.println("a == b");
else
System.out.println("Not True");
每个Java专家都知道,如果(a == b)将由于String pooling facility而通过.
根据字符串池
每次代码创建字符串文字时,JVM首先检查字符串文字池.如果池中已存在该字符串,则返回对池化实例的引用.如果池中不存在该字符串,则会创建一个新的String对象并将其放置在池中. JVM最多保留此池中任何String的一个对象.字符串文字始终引用字符串池中的对象
这就是为什么在上面的代码中条件已经过去了.
现在问题就出现了.在上面的代码中,当我添加了两个额外的行a =“1”和b =“1”时,现在是字符串a&的值. b将是Test1.New代码将是这样的
String a="test";
String b="test";
if(a==b)
System.out.println("a == b");
else
System.out.println("Not True");
a+="1"; //it would be test1 now
b+="1"; //it would also be test1 now
if(a==b)
System.out.println("a == b");
else
System.out.println("Not True");
在改变字符串之后,当我放置if(a == b)检查然后它没有通过.我知道这是由于String的不变性功能但我想知道
1)更改后,JVM是否存储了两个不同的对象?
2)JVM是否调用新的String()来更改任何String?
3)为什么他们没有作为一个单独引用,即使我试图在改变时调用intern()? Q3提示:a =“1”.intern();
b =“1”.intern();
解决方法:
1)是的,这就是a == b失败的原因.这些新字符串不是字符串池的一部分,因为它们不是字符串的文字.
2)正如@LuiggiMendoza所指出的,如果编译器有办法知道字符串的值,它将使用String构造函数,否则它将在内部使用StringBuilder(在一天结束时它将使用String构造函数返回最后的String)
3)即使“1”是文字,也是“1”.intern()的结果;本身不是文字,而是使用String构造函数创建的新String对象,因此它不会添加到String池中.
内容总结
以上是互联网集市为您收集整理的java – 更改String后的字符串池全部内容,希望文章能够帮你解决java – 更改String后的字符串池所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。