首页 > 代码库 > Java里的Deep Copy和Shallow Copy
Java里的Deep Copy和Shallow Copy
以前从来没听说过这两个名词,这几天用List和Map的时候发现bug,才第一次在stackoverflow上知道有这么两个简单的专业术语可以形容我遇到的问题。
写下来的都是基于自己的理解,或许不准确,如果以后发现不对再回来修正。
首先,Java的数据类型只有两种:primitive type和object type。
基本数据类型(primitive type)在赋值的时候,只存在一种情况,因为他们的内存位置就是他们的实际值的位置,如果把一个变量赋值给另一个变量,也会在内存增加一个新的值。
对于引用类型(object)才会存在两种情况,因为object本身就有两个值。一个是内存地址,另一个是这个内存地址存放的object本身的值。当你把一个变量赋值给另一个变量时,存在两种情况:
1. 只copy内存地址给这个新变量,这种情况下,两个变量指向的是同一个内存位置,任何一个变量对其进行修改都会影响另一个变量。这就是所谓的shallow copy。
2. 把object的值重新生成一份,也就是说两个变量虽然值相等,可是在内存里拥有不同的位置,彼此互不影响。这是deep copy。
其实我不太想得到什么情况下要shallow copy,看起来就是个多余的变量而已啊。
Java里的Deep Copy和Shallow Copy
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。