在方法调用传参中的对象引用问题

img


在如上代码中为什么map最终输出的元素是("bb",2l),而不是为null,或者包含两个元素

你如果学过cpp的指针就好理解了
java所有的引用对象都相当于指针,用=号相当于给指针赋值而不是给指向的内容赋值
map.push()相当于cpp里的map->push(),所以会改变原来的对象map=tmp是改变了map指向的对象,所以后面的修改和map无关

【以下回答由 GPT 生成】

问题的输出结果为("bb",2l),而不是null或者包含两个元素的原因是因为在Java中,方法传递的是对象的引用。

当你调用testMap(map)方法时,实际上是将map对象的引用传递给了testMap方法中的map参数。因此,在testMap方法中对map对象所做的操作会影响到原始的map对象。

testMap方法中首先执行map.put("bb", 2),这会向原始的map对象中添加一个键值对("bb", 2);然后创建了一个新的tmp对象,并向其添加了一个键值对("1");接着将map引用指向了tmp对象,即map = tmp;最后,再向map对象添加了一个键值对("cc", 3)。

由于在方法调用时传递的是对象的引用,所以在testMap方法中对map对象的任何修改都会影响到原始的map对象。但是,当将map引用指向了新的对象tmp后,就不再对原始的map对象产生影响。

因此,最终输出的map对象包含的元素为("bb", 2l),而不是null或者包含两个元素。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^