java对象的内存地址

 HashSet<List<Integer>> ans = new HashSet<>();
        List<Integer> list = new ArrayList<>();
        list.add(1111);
        list.add(22222);
        List<Integer> list1 = new ArrayList<>(list);
        System.out.println(list1.hashCode());
        ans.add(list1);
        List<Integer> list2 = new ArrayList<>(list);
        System.out.println(list2.hashCode());
        ans.add(list2);
        for (List<Integer> an : ans) {
            System.out.println(an);
        }

想问下大神们 为啥list1 和 list2 拥有相同的hashcode 即内存地址
因为发现set中只有一个list
同时我发现

List<Integer> list1 = new ArrayList<>();
List<Integer> list2 = new ArrayList<>();

list1 和 list2 也有相同的内存地址 他们难道不都是new出来的吗? 为什么会一样呢?

阅读 2.2k
2 个回答
  1. hashCodehashCode 不是内存地址
  2. 一般来说,内容相同(即equals == true)的对象,hashCode相等
新手上路,请多包涵

HashSet:

public boolean add(E e) {
    return map.put(e, PRESENT)==null;
}

HashMap:

public V put(K key, V value) {
    return putVal(hash(key), key, value, false, true);
}

实际上是两个对象,但是第二个加不进去。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题