考虑一下,我有一个驱动程序函数foo()
,其定义如下:
void foo()
{
Map<Integer,Character> map = new HashMap<Integer,Character>() ;
bar(map)
//operations on map
}
void bar(Map<Integer,Character> map)
{
Map<Integer,Character> map2 = new HashMap<Integer,Character>(map) ;
//operations over map2
}
现在,据我所知,map2
上的操作应该更改原始map
,因此map
内的foo()
上的操作将使用不同的版本map
比原来的MonitoredSession
。
我相信的理由:
也会传入参考数据类型参数,例如对象 方法的价值。这意味着当方法返回时, 传入引用仍引用与以前相同的对象。 但是,对象的字段的值可以在中更改 方法,如果他们有适当的访问级别。
因此,由于我们正在制作浅色副本,因此对副本的操作最终会更改传递的地图,并且由于第2点,此传递的地图上的所有更改都会反映在原始地图上。
但我有一个矛盾的例子,质疑我的理解。那么,我的想法是否正确?或者还有别的什么呢?
答案 0 :(得分:-2)
从另一个地图初始化散列图不会导致浅拷贝。新的地图对象将拥有自己的数据表,因此删除或添加条目不会影响这两个地图。但是,两个映射中的键和值对象都是相同的,因此对键和值对象的任何操作都将在两者中都可见,前提是这些对象不是不可变的而不是字符串对象