字符串相加不一定相等
public class demo01 {
public static void main(String[] args) {
String s1 = "hellojava";
String s2 = "hello";
String s3 = "java";
String s4 = "hello" + s3;
String s5 = s2 + "java";
String s6 = s2 + s3;
String s7 = "hello" + "java";
String s8 = new String("hellojava");
System.out.println(s4);
System.out.println(s1 == s4);
System.out.println(s5);
System.out.println(s1 == s5);
System.out.println(s6);
System.out.println(s1 == s6);
System.out.println(s7);
System.out.println(s1 == s7);
System.out.println(s8);
System.out.println(s1 == s8);
}
}
输出结果:
hellojava
false
hellojava
false
hellojava
false
hellojava
true
hellojava
false
false
为什么结果会不同?![]
- 事实上并不是表面看起来这么简单,给字符串直接赋值的在java看来其实就是常量,他们会被放到常量池中,存储地址为常量池地址,另外,常量池中的常量是唯一的,这就很好解释s7是true
- 对于s8,s8是new出来的,new出来的一律在堆中,自然而然与s1不相等。
- 对于s4,s5,s6,这三个本质上其实是一样的,这三个赋值式中,都有变量,对于这种变量加常量,常量加变量,变量加变量这三种来说,对于String类型的变量java在执行的时候会给变量new出一个对象(StringBuilder)然后调用append方法,进行字符串的拼接。既然是new出来的那么地址自然就在堆内存中。
- 对于s8和s9,两个都是new出来的,地址根本不一样,自然不相等
总结:所以来说 字符串+字符串不一定等于字符串
字符串常量 + 字符串常量 = 字符串常量
标签:
java_基础
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· DeepSeek在M芯片Mac上本地化部署