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

相关推荐
摸鱼仙人~3 分钟前
一文详解PyTorch DDP
人工智能·pytorch·python
超级种码3 分钟前
Java:JavaAgent技术(java.instrument和java.attach)
java·开发语言·python
天天向上10245 分钟前
go 配置热更新
开发语言·后端·golang
晨晖220 分钟前
顺序查找:c语言
c语言·开发语言·算法
wadesir29 分钟前
C++非对称加密实战指南(从零开始掌握RSA加密算法)
开发语言·c++
Salt_07281 小时前
DAY44 简单 CNN
python·深度学习·神经网络·算法·机器学习·计算机视觉·cnn
Iridescent11211 小时前
Iridescent:Day35
python
a程序小傲1 小时前
阿里Java面试被问:.Java 8中Stream API的常用操作和性能考量
开发语言·windows·python
爱装代码的小瓶子2 小时前
【c++进阶】从C++98到C++11的奇妙旅程(故事科普版)
开发语言·c++
智航GIS2 小时前
2.3 运算符详解
开发语言·python