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 将一个对象的所有字段值 赋给另一个 对象
717 0
JAVA 将一个对象的所有字段值 赋给另一个 对象
|
6月前
|
存储 索引
数组和对象有什么区别?
数组和对象有什么区别?
41 0
|
6月前
|
fastjson
Map对象与实体类Object对象转换
Map对象与实体类Object对象转换
|
6月前
|
存储 算法 C语言
27 C++ - 对象成员变量和函数的存储
27 C++ - 对象成员变量和函数的存储
20 0
|
6月前
|
存储 JavaScript 前端开发
什么是数组,什么是对象,他们的区别是什么
什么是数组,什么是对象,他们的区别是什么
29 0
|
7月前
|
Java
对象的相等和引用相等的区别
对象的相等和引用相等的区别
|
10月前
|
SQL 存储 数据采集
像对象一样对待数据
估计每个刚刚使用数据库的人都会被坑得遍体鳞伤。对于一个刚刚学会 Python 不久的开发新手来说,使用数据库的 SQL 语句几乎相当于再学一种新的语言。虽然 sqlite、pymysql 等模块提供了与数据的连接,但仍然需要自己去拼接 SQL 语句。Python 语法和 SQL 语法、各种引号、百分号、转义字符混杂在一起的酸爽,用过的人都忘不了。
|
存储 JSON 数据格式
Map对象和普通对象的7个区别
Map对象和普通对象的7个区别
获取一个集合中(集合中存贮的是对象)根据对象的某一个属性获取对应数据
获取一个集合中(集合中存贮的是对象)根据对象的某一个属性获取对应数据
87 0
|
安全 Java
构建一个创建Map的工具类来辅助理解可变传参
虽说java作为编译语言,但是它本身也提供了很多运行时能力,今天介绍一个非常基础的知识点,可变参数传递 在日常的开发过程中,创建Map对象还是比较常见的,现在我希望写一个工具类,可以非常简单创建并初始化Map对象 因此我们可以实现一个MapUtil工具类,来支持这个场景
215 0