Clone中存在的浅克隆问题】的更多相关文章

A.java package second; public class A { String country;//国家 String province;//地区 String city;//城市 public A(String country,String province,String city){ this.country = country; this.province = province; this.city = city; } } B.java package second; pub…
clone:用于两个对象有相同的内容时,进行复制操作. 提示:Java中要想自定义类的对象可以被复制,自定义类就必须实现Cloneable中的clone()方法. 浅复制:另一个对象用clone()方法对已经存在的对象进行复制的时候,会改变被复制对象里面所有的内容,换句话说,浅复制就是对对象的复制出现了一些问题. 深复制:另一个对象对已有的对象进行相同的内容复制的时候,不会改变原对象的内容 什么情况下会出现浅复制呢?用下面的例子进行说明: 学生类: public class Student im…
在最近的秋招中,阿里和多益网络都问到了这个问题,虽然很简单,但是我还是想总结一下,感兴趣的可以看一下我的个人博客网站(Spring+MyBatis+redis+nginx+mysql)(适合菜鸟),最近会抽空把最近面试遇到的问题总结一下. 本文针对问题:深克隆和浅克隆的区别和实现方式?(阿里电面,多益网络的选择题) Talk is cheap 最近不止一次遇见深浅克隆(深复制,浅复制)的问题,除了印象中有个clone方法外一脸懵逼!!!克隆(复制)在Java中是一种常见的操作,目的是快速获取一个…
分一下几点讨论: 为什么要克隆? 如何实现克隆 浅克隆和深克隆 解决多层克隆问题 总结 一:为什么要克隆? 大家先思考一个问题,为什么需要克隆对象?直接new一个对象不行吗? 答案是:克隆的对象可能包含一些已经修改过的属性,而new出来的对象的属性都还是初始化时候的值,所以当需要一个新的对象来保存当前对象的“状态”就靠clone方法了.那么我把这个对象的临时属性一个一个的赋值给我新new的对象不也行嘛?可以是可以,但是一来麻烦不说,二来,大家通过上面的源码都发现了clone是一个native方法…
目录 Part6:Java中的克隆 Example01:Java对象的假克隆 Example02:Java对象的浅克隆 Example03:Java对象的深克隆 Example04:序列化与对象克隆 Example05:深克隆和序列化的效率比较 假克隆.浅克隆和深克隆的应用范围 Part6:Java中的克隆 @ *** Example01:Java对象的假克隆 对象的克隆是Java中的一项高级技术,获得与其相同的对象.   基本数据类型可以使用"="来进行克隆,此时两个变量除了相等是没…
假如说你想复制一个简单变量.很简单: int apples = 5; int pears = apples; 不仅仅是int类型,其它七种原始数据类型(boolean,char,byte,short,float,double.long)同样适用于该类情况. 但是如果你复制的是一个对象,情况就有些复杂了. 假设说我是一个beginner,我会这样写: class Student { private int number; public int getNumber() { return number…
clone()方法的约定 首先明确的是clone()是object的方法.Cloneable接口没有任何方法,它只起到标识的作用.(java的原型模式有用到) Cloneable接口的目的是作为对象的一个混合接口,表明这样的对象允许克隆(clone),但是这个接口却没有定义clone(),这是它的缺陷:无法约束子类实现clone()方法. Object定义了一个受保护的clone()方法.Cloneable虽然没有定义clone()方法,但是却影响了Object.clone()方法的行为:如果一…
clone方法会返回该实例对象的一个副本,通常情况下x.clone() != x || x.clone().getClass() == x.getClass() || x.clone().equals(x)也为真.但不严格要求,我们能够通过重写该方法来覆盖. protected native Object clone() throws CloneNotSupportedException; 能够看到.clone是一个本地方法,可能会抛出CloneNotSupportedException异常,什…
在Java中,经常会需要新建一个对象,很多情况下,需要这个新建的对象和现有的某个对象保持属性一致. 那么,就有两种方式来实现这个对象的构造: ①通过新建一个对象,为这个对象的属性根据原有对象的属性来进行赋值 ②调用clone方法,来实现实例对象的克隆 对于Java的clone方法,需要注意的就是它实际上是一种“浅克隆”(Shallow Clone),对于int.double这种基本数据类型,直接拷贝值:对于String这样的类对象,则是直接拷贝引用.因此对于通过clone得到的对象来说,它很大程…
这是使用的是序列化的方式实现深拷贝 [Serializable] class Person:ICloneable { /// <summary> /// 字符串在clone 中类似于值类型的处理方式 /// </summary> public string Name { get; set; } //引用类型 clone public List<int> lis = new List<int>(); /// <summary> /// 深拷贝 //…