你如果学过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或者包含两个元素。