首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >浅拷贝范围

浅拷贝范围
EN

Stack Overflow用户
提问于 2017-10-17 16:50:03
回答 1查看 146关注 0票数 0

考虑一下,我有一个驱动程序函数foo(),定义如下:

代码语言:javascript
复制
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,因此foo()中的map操作将在与最初版本的map不同的版本上操作。我相信的理由:

  1. 根据的帖子,我们可以说我们正在做一个哈希地图的浅拷贝
  2. 文档中,明确指出:

引用数据类型参数(如对象)也按值传递给方法。这意味着当方法返回时,传入的引用仍然引用相同的对象。但是,如果对象的字段具有适当的访问级别,则可以在方法中更改它们的值。

因此,由于我们正在创建一个浅拷贝,对副本的操作将最终更改已传递的映射,并且由于第2点的原因,对此传递映射的所有更改都会反映在原始映射上。

但我有一个自相矛盾的例子质疑我的理解。那么,我的想法正确吗?还是有别的东西?

EN

回答 1

Stack Overflow用户

发布于 2017-10-17 16:58:34

从另一个映射初始化hashmap不会导致浅拷贝。新的map对象将有它自己的数据,因此删除或添加条目不会影响这两个映射。但是,两个映射中的键和值对象都是相同的,因此,对键和值对象的任何操作都是可见的,前提是这些对象不是不可变的,也不是字符串对象。

票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46795260

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档