Java中 hashcode 和 equals、equals和==

一、Collection类对象在调用remove, contains等方法时需要比较对象是否相等,这会涉及到对象类型的equals,方法和hashCode方法;对于乍定义的类型,需要重写equals和hashCode方法(同时)以实现自定义的对象相等规则。

注意:Java中规定,两个内容相同的对象应具有相同的hashCode

//若equals为true 则hashCode可能相等,反之,则不然

二、引用网络代码及解释如下:

链接:https://www.nowcoder.com/questionTerminal/bbdc91459cf849168b510d8aad90227f
来源:牛客网

public class Test1{
    public static void main(String args[]){
            String a="1234";
            String b="1234";
            String c = new String("1234");
            System.out.println(a==b);    //true
            System.out.println(a==c);    //false
            System.out.println(a.equals(c));   //true
    }
}
第一次String a="1234"时,会在常量池中创建一个常量1234,String b=1234时,常量池中已经有了该常量,所以直接取,a和b的地址一样,所以地址值相等;

String c = newString("1234")重新new了对象,在堆内存中开辟了新的空间,所以地址值不想等,而equals方法比较的是值是否相等.

结论:equals只是进行值判断不对类是不是同一个引用不进行判断,而==判断包括值和类引用。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值