在使用set添加对象的时候,重写了hashcode方法后,为什么equals返回的仍是false,如何理解hash值和内存地址之间的关系。个人理解不知道对不对

    /*
     * 1.对象的哈希码值和内存地址值不是一回事;
     * 2.如果自定义类不复写Object类中的equals方法,那么equals比较的就是两个对象的内存地址值。
     */
    /**
     * 下面证明了hash值和内存地址的关系
     * 一、当没有重写hashCode()方法的时候,
     *         System.out.println(c);//获取的是hash值 collection_.set_.C@1b6d3586
     *         System.out.println(System.identityHashCode(c));//获取的是内存地址 460141958
     *         System.out.println(d);//获取的是hash值 collection_.set_.C@4554617c
     *         System.out.println(System.identityHashCode(d));//获取的是内存地址 1163157884
     *     内存地址和哈希值是不一样的。
     * 二、当重写了hashCode()方法的时候:
     *         System.out.println(c);//获取的是hash值 collection_.set_.C@1661a95
     *         System.out.println(System.identityHashCode(c));//获取的是内存地址 460141958
     *         System.out.println(d);//获取的是hash值 collection_.set_.C@1661a95
     *         System.out.println(System.identityHashCode(d));//获取的是内存地址 1163157884


     * 通过上面的两个例子,可以看出的是,重写hashCode()方法,影响的仅仅是hash值,而不会影响内存地址。
     * 如果不重写equals方法的话,默认比较的是内存地址。那么无论hash值是否改变,地址是不变的。
     */
posted @ 2024-04-07 13:39  小陈java日记  阅读(9)  评论(0编辑  收藏  举报