码迷,mamicode.com
首页 > 编程语言 > 详细

Java里的Deep Copy和Shallow Copy

时间:2015-01-16 12:46:41      阅读:157      评论:0      收藏:0      [点我收藏+]

标签:

以前从来没听说过这两个名词,这几天用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

标签:

原文地址:http://www.cnblogs.com/happyh/p/4228315.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!