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

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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值