修改对象的值,集合中的值也被改变? 一句话看懂 内存空间 内存地址 与 引用对象

引出问题

一个朋友问我,这种写法为什么可以修改值
在这里插入图片描述
在这里插入图片描述
我说
在这里插入图片描述

再探讨一下


创建实例

	@Test
	public void demo() {
		//实例化对象
		Person person = new Person("张三");
		Map map = new HashMap();
		//map中的key:index1 指向 person对象
        map.put("index1",person);
        //修改对象属性
		person.setName("李四");
		System.out.println(map.get("index1"));
	}

打印结果是
Person [name=李四]

图示

1) 实例化 person 对象时 开辟出一块内存空间, 并在内存地址对应的内存中写入数据

在这里插入图片描述

2)使 index1 指向 person 对象, index1 也对应 person 的内存地址
在这里插入图片描述
3)通过person对象修改值
在这里插入图片描述
内存中的值改变,但是person对象、map中的key对应的内存地址并没有改变
因此 map.get(“index1”) 取值改变


总结

Java中的对象,在实例化的时候会在内存中开辟一块内存空间,这块内存空间是有地址的,称为内存地址,实例化的对象本身并不存储数据,只存放内存地址,所以称为引用对象
(每次使用对象时,都是先获取到内存地址,然后再去内存中找到对应的内存空间,再进行操作)

集合中的key对应的是某个对象的首地址,指向的是某个对象,往对象中加了数据,对象的内容变了,但是对象的首地址没有变,集合中的key仍然指向这个对象的首地址。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值