map中存储的是引用,而不是对象本身

简介: 该内容是关于Java编程中验证Map存储引用而非复制对象的示例。创建大型List导致内存增加,说明List确实占用空间。通过Person类示例,将不同对象放入Map,改变一个对象的属性后,比较原对象与Map中的键值对,发现两者相等,证明Map保存的是对象引用。

 证明,我先构造了一个很大的List对象,用VisualVM查看的内存一下变大了,然后我for循环向map放进了100个之前的list,如果存的是对象,那内存会暴增,但是内存没有变化,证明map存的是引用,下面证明两个对象不一致,但是存进map后,对比两个对象为true的只能为引用

@Data
@Accessors(chain = true)
public class Person {
    private String name;
    private Integer age;
}

image.gif

package com.netty.demos;
import com.netty.demos.client.entiy.Person;
import java.util.HashMap;
import java.util.Map;
public class Main {
    public static void main(String[] args) {
        Map<Integer, Person> mapA = new HashMap<Integer, Person>();
        Map<String, Person> mapB = new HashMap<String, Person>();
        Person per = new Person();
        Person per2 = new Person();
        Person per3 = new Person();
        per.setName("x");
        System.out.println("per  "+per.toString());
        per2=per;
        System.out.println("per2  "+per2.toString());
        mapA.put(1, per2);
        per.setName("y");
        System.out.println("per  "+per.toString());
        per3=per;
        System.out.println("per3  "+per3.toString());
        mapB.put("1", per3);
        System.out.println(per2==per3);
        System.out.println(mapA.get(1).equals(mapB.get("1")));
    }
}

image.gif

image.gif 编辑

目录
相关文章
JAVA 将一个对象的所有字段值 赋给另一个 对象
JAVA 将一个对象的所有字段值 赋给另一个 对象
724 0
JAVA 将一个对象的所有字段值 赋给另一个 对象
|
2天前
|
Java 开发者
干货总结|快速构造String对象及访问其内部成员的技巧
本文详细解释了String类的底层实现,介绍了构造String对象及其访问其内部成员的技巧。
|
6月前
|
存储 索引
数组和对象有什么区别?
数组和对象有什么区别?
42 0
|
6月前
|
fastjson
Map对象与实体类Object对象转换
Map对象与实体类Object对象转换
|
6月前
|
存储 JavaScript 前端开发
什么是数组,什么是对象,他们的区别是什么
什么是数组,什么是对象,他们的区别是什么
31 0
|
7月前
从数组对象格式的数组中删除指定对象
从数组对象格式的数组中删除指定对象
18 0
|
7月前
|
Java
对象的相等和引用相等的区别
对象的相等和引用相等的区别
|
存储 JSON 数据格式
Map对象和普通对象的7个区别
Map对象和普通对象的7个区别
|
存储 Java 对象存储
基础篇:Object对象
内存对齐区是什么? HotSpot VM的自动内存管理系统要求对象起始地址必须是8字节的整数倍,换句话说就是对象的大小必须是8字节的整数倍。因此当对象实例数据部分没有对齐的话,就需要通过对齐填充来补全
60 0
获取一个集合中(集合中存贮的是对象)根据对象的某一个属性获取对应数据
获取一个集合中(集合中存贮的是对象)根据对象的某一个属性获取对应数据
88 0