【equals vs ==】

equals vs ==

对比项== 运算符equals() 方法
比较对象内存地址(引用是否指向同一对象)对象内容是否逻辑相等(可自定义)
适用类型基本类型(int, char 等)和引用类型仅引用类型(对象)
默认行为比较地址(引用类型)或值(基本类型)默认与 == 相同(Object 类实现)
可重写性不可重写(Java 语言运算符可重写(自定义比较逻辑)
null 安全性直接使用(null == obj 安全)需判空(obj.equals(null) 可能抛异常)
  • 默认情况下(Object类的实现),equals()和 ==一样,比较的是内存地址
public boolean equals(Object obj) {
    return (this == obj);
}
  • 但许多类(如 String、Integer、自定义类)会 ​​重写 equals()​​,使其比较内容而非地址。
// s1是字符串字面量,存储在 ​​字符串常量池(String Pool)​​ 中。
// s2是通过 new String("hello")创建的,会在 ​​堆内存​​ 中新建一个对象。
// 因此 s1和 s2的地址不同,==返回 false。
String s1 = "hello";
String s2 = new String("hello");

// s1和 s3都是字符串字面量 "hello",Java 的字符串常量池会 ​​复用相同的字符串对象​​。
// 所以 s1和 s3指向的是 ​​同一个内存地址​​,==返回 true。
String s3 = "hello";

System.out.println(s1.equals(s2));  // true(内容相同)
System.out.println(s1 == s2);       // false(地址不同)
System.out.println(s1 == s3);       // true
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值