Java返回对象Setter调用:是否修改HashMap中原Minion对象?
关于引用类型修改的问题解答
嘿,这个问题问到Java里一个很关键的点了——这本质是引用类型的工作机制,我给你拆解开讲明白:
首先,当你调用
MyClass.getMinion(somestuffhere)时,返回的并不是HashMap里Minion对象的副本,而是指向该Minion实例的引用。换句话说,testMinion变量和HashMap中存储的那个Minion对象,其实是指向内存中同一块区域的“不同名字”,它们本质上是同一个对象。所以当你执行
testMinion.setLevel(9);时,你是通过这个引用直接修改了内存中那个真实存在的Minion对象的属性值。这时候HashMap里的原Minion对象的level属性也会同步变成9,因为它们本来就是同一个东西,完全不需要把修改后的Minion再“更新”回HashMap。那什么时候需要更新HashMap呢?只有当你替换了
testMinion引用指向的对象时才需要,比如像下面这样:// 这里testMinion指向了一个全新的Minion对象,和HashMap里的原对象没关系了 testMinion = new Minion(); testMinion.setLevel(9); // 这时候如果想让HashMap里的对应位置换成这个新对象,才需要调用类似的更新方法 MyClass.updateMinion(somestuffhere, testMinion);
打个通俗的比方:HashMap就像一个文件柜,里面放着你的笔记本(Minion对象),getMinion方法就是把笔记本的钥匙(引用)递给你。你用钥匙打开笔记本改了页码(setLevel),文件柜里的笔记本页码自然也变了——你根本不需要把笔记本重新放回柜子,因为它本来就在那儿。
内容的提问来源于stack exchange,提问作者paperbenni
相关产品推荐
相关产品推荐

