问答

java对象的内存地址

作者:admin 2021-04-18 我要评论

HashSetListInteger ans = new HashSet(); ListInteger list = new ArrayList(); list.add(1111); list.add(22222); ListInteger list1 = new ArrayList(list); ...

在说正事之前,我要推荐一个福利:你还在原价购买阿里云、腾讯云、华为云服务器吗?那太亏啦!来这里,新购、升级、续费都打折,能够为您省60%的钱呢!2核4G企业级云服务器低至69元/年,点击进去看看吧>>>)
 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出来的吗? 为什么会一样呢?

###
  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);
}

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

版权声明:本文转载自网络,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本站转载出于传播更多优秀技术知识之目的,如有侵权请联系QQ/微信:153890879删除

相关文章
  • nginx响应速度很慢

    nginx响应速度很慢

  • 点击选中的多选框,会在已选那一栏显示

    点击选中的多选框,会在已选那一栏显示

  • PHP 多态的理解

    PHP 多态的理解

  • 关于C语言中static的问题

    关于C语言中static的问题

腾讯云代理商
海外云服务器