java文字池_关于java String文字池和String的连接的混淆

本文通过一个简单的Java代码示例,探讨了字符串池的工作原理及如何影响字符串比较运算符==的行为。作者对比了直接创建的字符串与通过拼接创建的字符串之间的差异,并提出了疑问。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

所有,

我在编写下面的代码时遇到了问题

String hello = "Hello";

String str5 = "Hel" + "lo";

String str8 = "Hel";

String str9 = "lo";

String str10 = str8 + str9;

System.out.println("str10==hello?" + (str10 == hello));

System.out.println("str5==hello?" + (str5 == hello));

System.out.println("str10==str5?" + (str10 == str5));

然后我运行我的代码,控制台打印这个

str10 == hello ? false

str5 == hello ? true

str10 == str5 ? false

这让我很困惑.为什么第二次打印TRUE但第一次打印FALSE?

在我理解String文字池时,当一个字符串被定义并且JVM将检查池是否包含该字符串时,如果没有,则将该字符串放入pool.in我的代码中,变量hello存在于字符串池中,“Helo”和“lo” “也在游泳池里,我的问题是

>如果池中存在“Helo”和“lo”串联的结果.

>关于str5和str10s的定义有什么区别,为什么它们不是“==”? str5和str10是否指向字符串池中的不同“Hello”?(“==”似乎表示引用是同一个对象)

我的jdk版本:1.6.0_29

我的IDE:Intellij Idea 11.2

有人可以指出来吗?非常感谢你

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值