String的字符串拼接

java中

String a = "123" + "234";

String b = "123";

String c = b + "234";

其中a和c的区别是什么? a == c 为什么为false

在Java中,字符串的处理特别是涉及到字符串常量和字符串变量的连接时,会涉及到字符串池(String Pool)和字符串对象的创建方式。

String a = "123" + "234";

这里"123"和"234"都是字符串常量。在编译时,Java编译器会优化这种字符串常量的连接,实际上它会将这两个字符串合并为一个字符串常量"123234"。因此,a引用的是字符串池中的一个字符串。

String b = "123";

这里b是一个对字符串常量"123"的引用。

String c = b + "234";

在这里,由于b是一个变量,所以b + "234"的连接操作是在运行时完成的。这意味着会创建一个新的字符串对象来表示连接后的字符串,并且这个新对象不会被放入字符串池中(除非显式调用.intern()方法)。

总结:

a == c为false的原因是:

a是对字符串池中的字符串常量的直接引用。

c是一个在运行时创建的新字符串对象,即使它的内容与a相同,它们在内存中是两个不同的对象。

相关推荐
csdn_aspnet8 小时前
C# 从凸包中删除点(Deleting points from Convex Hull)
开发语言·c#
Zane19948 小时前
可变对象 vs 不可变对象:为什么"可变默认参数"是 Python 最经典的坑?
后端·python
cts6188 小时前
Python全栈claude.md文档
开发语言·python
名字还没想好☜9 小时前
Spring @Async 不生效排查:自调用失效、默认线程池坑与异步方法里的异常去哪了
java·python·spring·异步
忘路之远近i9 小时前
受够阿里云自带终端后,我用 Cursor + grill-me 做了个运维面板
服务器·开发语言·人工智能·python·阿里云·云计算
Tim_109 小时前
【C++】020、野指针&悬空指针
java·开发语言
郝学胜_神的一滴9 小时前
Python 高级编程 026:序列内核深剖
python·pycharm
吃好睡好便好9 小时前
MATLAB中图像格式的转换
开发语言·图像处理·学习·计算机视觉·matlab
爱喝水的鱼丶9 小时前
SAP-ABAP:SELECT大数据量查询性能调优——避免嵌套循环、减少数据库交互的核心方案
开发语言·数据库·sql·性能优化·sap·abap·erp
Dxy12393102169 小时前
Python 实现POST上行压缩上传可用HTTP库汇总
开发语言·python·http