假设我创建了两个不同的类:User和Admin
User user1 = new User();
User user2 = new User();
user1和user2的hashcode值一定不一样吗
Admin admin1 = new Admin();
user1和admin1的hashcode值一定不一样吗

解决方案 »

  1.   

    当然不一定,hashcode本身就是个函数,是可以重载的,你完全可以写个函数总是返回固定值。但hashcode函数从设计要求上来说,要尽量保证:不同对象的hashcode不同。
      

  2.   

    补充下关于hashcode的设计目标,比如:User user1 = new User("张三");
    User user2 = new User("李四");
    这种情况下应该尽量保证 user1 和 user2 的 hashcode 不一致,但是:User user1 = new User("张三");
    User user2 = new User("张三");
    这种情况下应该尽量保证 user1 和 user2 的 hashcode 相同。
      

  3.   

    如果user1和user2的hashcode一样 那么他们有什么东西是一定不一样的呢? 我需要在程序里面区分它们
      

  4.   

    hashCode 如果不重载,肯定会不一样如果被重载了,就看自己的需要了
      

  5.   

    不重写该方法,就是调用父类的hashCode方法,返回值是不一样的
    这就看你怎么重写hashCode的,有什么东西不一样?如果你设置的属性都一样的话,真的没法判断了,只能用(==)比较内存地址来判断了(如果没有重写equals方法的话,用缺省的equals方法就是调用==比较内存地址了)
    String s1 = "abc";
    String s2 = new String("abc");
    System.out.println(s1.hashCode() == s2.hashCode());
    System.out.println(s1 == s2); //用内存地址来判断不同
      

  6.   

    需要从本质来了解hashCode:用来得到一个位置用来存放当前对象
    就算算出是相同位置也会再分配
    so 一样不一样要看算法,总之不确定