== 与equals

在Java中,==操作符比较的是两个字符串对象的内存地址是否相同,而equals()方法比较的是两个字符串对象的值是否相等。通常情况下,如果两个字符串的内容相同,它们的内存地址也很有可能相同,此时==操作符和equals()方法都会返回true。

然而,在以下情况下,equals()方法可能返回true而==操作符返回false:

  1. 字符串常量池

字符串常量池是Java中缓存字符串的一个机制,使用字符串常量池可以避免重复创建相同的字符串对象,以节省内存空间。当使用双引号定义字符串时,如果字符串常量池中已经存在该字符串,那么Java会直接返回该字符串的引用。例如:

String str1 = "hello";
String str2 = "hello";
System.out.println(str1 == str2); // 输出 true
System.out.println(str1.equals(str2)); // 输出 true

上述代码中,虽然str1和str2是两个不同的对象,但是它们在字符串常量池中的引用是相同的,因此==操作符返回true。

但是,如果使用new关键字创建字符串对象,Java会在堆内存中为这个字符串对象分配新的存储空间,而不会使用字符串常量池。例如:

String str1 = new String("hello");
String str2 = new String("hello");
System.out.println(str1 == str2); // 输出 false
System.out.println(str1.equals(str2)); // 输出 true

上述代码中,因为str1和str2都是通过new关键字创建的新对象,它们在堆内存中的引用是不同的,因此==操作符返回false。

 

 

 

 

 

 

posted @   人在代码在  阅读(27)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
点击右上角即可分享
微信分享提示