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只是进行值判断不对类是不是同一个引用不进行判断,而==判断包括值和类引用。

猜你喜欢

转载自blog.csdn.net/u013511642/article/details/70976949