java基础:==、equals()和hashcode()

1、区别java

==比较的是对象的地址,在不重写equals()和hashcode()的状况下,equals()和hashcode()比较的也是地址。可是在重写equals()和hashcode()后,equals()和hashcode()就能够比较内容:code

public static void main(String[] args) {
        User user1 = new User(1, "A", 22);
        User user2 = new User(1, "A", 22);
        System.out.println("==:" + (user1 == user2));
        System.out.println("equals():" + user1.equals(user2));
        System.out.println("user1的hashcode:" + user1.hashCode());
        System.out.println("user2的hashcode:" + user2.hashCode());
    }

运行结果:对象

==:false
equals():true
user1的hashcode:509445
user2的hashcode:509445

2、注意的点同步

一、若是须要自定义equals()方法,则重写equals(),为遵照契约,需同步重写hashcode();hash

二、对于String的几个类型,equals()和hashcode()已经重写因此能够用equals()对内容做对比class

3、提出的问题方法

一、equals()为true是否保证hashcode()必定一致?static

对于按照契约重写equals()和hashcode()的状况下,equals()为true能保证hashcode()一致co

二、hashcode()一致是否保证equals()为true?new

不能,会出现哈希碰撞的状况

相关文章
相关标签/搜索