您的位置:首页 > 其它

Map拷贝 关于对象深拷贝 浅拷贝的问题

2015-12-01 10:11 381 查看


上面程序的期望输出值是,

mapFrist的值均为1,

但是实际上输出结果为:

{key1=1}

{key2=2, key1=1}

这里是因为map发生了浅拷贝,mapFirst只是复制了map的引用,和map仍使用同一个内存区域,所以,在修改map的时候,mapFirst的值同样会发生变化。

浅复制:则是只复制对象的引用,两个引用仍然指向同一个对象,在内存中占用同一块内存。被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象。换言之,浅复制仅仅复制所考虑的对象,而不复制它所引用的对象。

深复制:被复制对象的所有变量都含有与原来的对象相同的值,除去那些引用其他对象的变量。那些引用其他对象的变量将指向被复制过的新对象,而不再是原有的那些被引用的对象。换言之,深复制把要复制的对象所引用的对象都复制了一遍。

如何解决?

使用深拷贝,拷贝整个对象,而非引用

Map中有个方法叫做putAll方法,可以实现深拷贝,如下



如上,输出结果为:

{key1=1}

{key1=1}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: