什么网站做禽苗的多,专业网页设计师,沧州企业网站专业定制,邯郸网站建设恋家java中有一个概念叫深拷贝和浅拷贝#xff0c;那这两个是什么意思呢#xff1f;其实你可以对比一下c中的传值和传引用的问题。
深拷贝
即两个相同的对象地址不同#xff0c;比如对象A通过拷贝出来对象B#xff0c;在对B对象进行操作时不会影响到A对象的内容。
浅拷贝
和…java中有一个概念叫深拷贝和浅拷贝那这两个是什么意思呢其实你可以对比一下c中的传值和传引用的问题。
深拷贝
即两个相同的对象地址不同比如对象A通过拷贝出来对象B在对B对象进行操作时不会影响到A对象的内容。
浅拷贝
和深拷贝相反创建一个对象A然后通过A对象克隆出对象B此时A和B两个对象的地址是一样的即两个对象使用的是同一个地址。
如何实现深拷贝和浅拷贝
浅拷贝的实现
可以使用Beanutils进行浅拷贝代码如下 观察结果我们发现拷贝出来的其实是两个不同的对象但是他们的值是相同的此时我们去修改user1中的值看user中的值是否会发生变化 这时user和user1的值都发生了改变说明BeanUtils使用的是浅拷贝的方式
深拷贝的实现
深拷贝实现方式有几种我们一一进行介绍
实现Cloneable接口重写clone方法 这个实现方式其实现在不怎么用因为想要重写clone方法就必须要实现Cloneable不然就会报CloneNotSupportedException异常而且一旦对象中增加或者删除某个属性也要相应修改clone方法所以比较繁琐因此这里就不做介绍了感兴趣的同学可以去其他博客上了解~
序列化实现深拷贝 我们可以把对象序列化成流然后再反序列化成对象这样得到的就是一个新对象了就比如我们可以使用各种json工具将对象序列化成JSON字符串然后再从字符串中反序列化对象。 要注意的是这里导入的依赖为以下依赖 dependencygroupIdcom.alibaba.fastjson2/groupIdartifactIdfastjson2/artifactIdversion2.0.46/version/dependency
不能是fastjson这个依赖不然你就会跟我一样喜提一个报错报错信息如下 除此之外我们还可以使用Apache Commons Lang提供的SerializationUtils工具来实现首先我们需要修改一下类 引入依赖 dependencygroupIdorg.apache.commons/groupIdartifactIdcommons-lang3/artifactIdversion3.4/version/dependency 我们发现也可以实现深拷贝~
以上就是深拷贝和浅拷贝的全部内容希望你能有所收获~