equals与==,equals与hashcode的区别

首先我们看一下equals在jdk里面的定义:
object:
public boolean equals(Object obj)
指示其他某个对象是否与此对象“相等”。
equals 方法在非空对象引用上实现相等关系:
对于任何非空引用值 x,x.equals(null) 都应返回 false。
Object 类的 equals 方法实现对象上差别可能性最大的相等关系;即,对于任何非空引用值 x 和 y,当且仅当 x 和 y 引用同一个对象时,此方法才返回 true(x == y 具有值 true)。

注意:当此方法被重写时,通常有必要重写 hashCode 方法,以维护 hashCode 方法的常规协定,该协定声明相等对象必须具有相等的哈希码。

参数:
obj - 要与之比较的引用对象。
返回:
如果此对象与 obj 参数相同,则返回 true;否则返回 false。
另请参见:
hashCode(), Hashtable

在基本数据类型,byte,short,char,int,long,float,double,boolean
中:
将此字符串与指定的对象比较。当且仅当该参数不为 null,并且是与此对象表示相同字符序列的 String 对象时,结果才为 true。
覆盖:
类 Object 中的 equals
参数:
anObject - 与此 String 进行比较的对象。
返回:
如果给定对象表示的 String 与此 String 相等,则返回 true;否则返回 false。
我个人理解:
public static void main(String[] args) {
String s1 = “Monday”;
String s2 = “Monday”;
String s3 = new String(“Monday”);
if (s1 == s2) {
System.out.println(“s1 == s2”);
} else {
System.out.println(“s1 != s2”);
}

    if (s3 == s2) {
        System.out.println("s3 == s2");
    } else {
        System.out.println("s3 != s2");
    }

    if (s3.equals(s2)) {
        System.out.println("s3.equals(s2)");
    } else {
        System.out.println("s3.equals(s2)");
    }
}
输出结果为:
s1 == s2
s3 != s2
s3.equals(s2)


个人理解:像s1与s2这样的
用这种方式的时候java首先在内存中寻找"Monday"字符串,如果有,就把"Monday"的地址给它,而向s3那样的,不管变量池里面有没有,他都会创建一个对象,产生一个新的地址,而==判断的是引用的地址是否相等。
equals的话,在object中与==是等价的,在基本类型中,进行重新。只是判断了内容是否相同

如果x.equals(y)返回“true”,那么x和y的hashCode()必须相等。
•如果x.equals(y)返回“false”,那么x和y的hashCode()有可能相等,也有可能不等
hashcode是将值进行散列以后进行比较,不同的数据hashcode以后可能会相同

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值