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相同,它们在内存中是两个不同的对象。

相关推荐
学习论之费曼学习法几秒前
无人值守AI内容矩阵实战(10):Windows 上让 Python 进程 7×24 活着
人工智能·windows·python·矩阵·powershell·进程守护
Soneswy2 分钟前
C++基础篇——类与对象(中)
开发语言·c++
CoderYanger4 分钟前
Java EE 进阶:5. Spring IoC&DI(第二弹):Spring IoC
java·开发语言·spring boot·spring·面试·职场和发展·java-ee
大侠在此在在此19 分钟前
我花了不到1块钱,用python把自己一年的1500次会话做成了个人知识库
python·llm
Jino25 分钟前
900×2100 的门洞,展开面积却是 3.4 ㎡ —— 不锈钢核价引擎的七条口径
python
贝壳69028 分钟前
Python 布尔数组选型:list、numpy.bool_、bitarray、RoaringBitmap、bool-hybrid-array 各管一段
python
一只爱撸猫的程序猿41 分钟前
全球出货第二,却不在 AI 的默认推荐里:一份悖论解剖报告
人工智能·python·产品
青峰讲运维42 分钟前
OpenStack Heat 编排:用模板一键交付云业务,告别手动点页面
开发语言·php·openstack
piaoyiren1 小时前
Python FTP 服务端项目详细功能文档
网络·数据库·python
miofly1 小时前
GitHub 今日推荐|Edge0:让大号 MoE 模型在一台 Mac 上流式跑起来
python·开源·github