Ⅰ java对象癿深复制和浅复制区别指什么帮帮忙~~
浅拷贝:仅复制引用,即两个引用指向同一个对象,如:
String aString = "hello";
String bString = aString;
深拷贝:复制对象的内容,Java里通过实现Clonnable并覆盖clone方法实现,具体深度由clone的实现决定,如:
public class People implements Clonnable{
private int age;
private String name;
public void setAge(int age){
this.age = age;
}
public int getAge(){
return this.age;
}
public void setName(String name){
this.name = name;
}
public String getAge(){
return this.name;
}
public Object clone(){
People people = new People();
people.setAge(this.age);
people.setName(this.name);
return people;
}
}
如果对您有帮助,请记得采纳为满意答案,谢谢!祝您生活愉快!
vaela
Ⅱ JAVA对象的浅复制和深复制是怎么一回事啊
显然,修改深复制得到的新值不会影响原值;
Ⅲ java浅拷贝的对象两个内向相等吗
两个对象内向相等。
java对象默认继承java。long。Object类,里面包含clone方法。JDKAPI的说明文档解释这个方法将返回Object对象的一个拷贝。要说明的有两点:一是拷贝对象是一个新对象,而不是一个引用。二是拷贝对象与用new操作符返回的新对象的区别就是这个拷贝已经包含了一些原来对象的信息,而不是对象的初始信息。
java中的基本数据类型判断是否相等,直接使用==就行了,相等返回true,否则,返回false。
Ⅳ java中什么是深拷贝,什么是浅拷贝
简单点跟你说吧,容易理解。
浅拷贝:
就是复制对象的值的时候,不管复制多少,所以的值都指向同一个对象。
深拷贝:
在复制对象的值的时候,同时也重新创建了一个对象,每个值都指向一个不同的对象。
如果你学习了c语言的指针,会理解的更深刻
Ⅳ java中深克隆与浅克隆的区别
深克隆与浅克隆
大家知道,对象是互相引用的,即对象中可能包含了另一个对象的引用,举例如:有一个Order对象,Order对象中又包含了LineItems对象,然后LineItems对象又包含了Item对象。
好了,现在我有一个Order对象order1,它包含了一个LineItems对象items,这表示的是有一个订单order1,订单的内容是items。
好的,现在有另一个客户想要一份订单,内容跟order1完全一样,那么在系统的逻辑层我们怎么做呢?很简单,order2=order1.clone().我们知道clone方法是在内存中生成一个新的对象,而不是只得到原对象的引用。这时候,有人说话了:“哦,明白了我们对order2的成员变量进行修改,是不会影响order1的。”很可惜,这句话只对了一半。
假设order类有一个成员变量name,当然改变order2.name不会影响order1.name,因为他们在不同的内存区域。但是如果改变order1.items呢?很遗憾,简单地使用order1.clone,是会影响到order2.items的。原因很简单,就是因为clone方法默认的是浅克隆,即不会克隆对象引用的对象,而只是简单地复制这个引用。所以在上例中,items对象在内存中只有一个,order1和order2都指向它,任何一个对象对它的修改都会影响另一个对象。
那相对浅克隆,深克隆自然就是会克隆对象引用的对象了。也就是说,在上例中,改变order1.items并不会影响order2.items了。因为内存中有两个一样的items。
如果实现深克隆?
一个方法自然是重写clone方法,添加如order.items=(LineItems)items.clone()的语句,也就是人为地添加对引用对象的复制。这个方法的缺点是如果引用对象有很多,或者说引用套引用很多重,那么太麻烦了。业界常用的方法是使用串行化然后反串行化的方法来实现深克隆。由于串行化后,对象写到流中,所有引用的对象都包含进来了,所以反串行化后,对等于生成了一个完全克隆的对象。绝!
这个方法的要求是对象(包括被引用对象)必须事先了Serializable接口,否则就要用transient关键字将其排除在复制过程中。
Ⅵ 浅复制和深复制的区别 java
浅复制和深复制的区别 java
大体上来说,深拷贝与浅拷贝的区别主要还是在于指针(或与指针)方面,浅拷贝只是简单的把源对象(这个是指广义的对象,不仅仅单指类的实例)的指针赋值给目标对象,对目标指针的操作就是对源对象的操作,所以在很多情况下,目标对象析构(或跳出其可见域)之后,源对象相关部分也就一同析构了。而深拷贝,是为目标对象重新分配空间,这样可以与源对象的操作分开。
Ⅶ java深拷贝和浅拷贝的区别
浅拷贝:只复制一个对象,对象内部存在的指向其他对象数组或者引用则不复制
深拷贝:对象,对象内部的引用均复制
示例:
publicstaticObject(ObjectoldObj){
Objectobj=null;
try{
//Writetheobjectouttoabytearray
ByteArrayOutputStreambos=newByteArrayOutputStream();
ObjectOutputStreamout=newObjectOutputStream(bos);
out.writeObject(oldObj);
out.flush();
out.close();
//
//aoftheobjectbackin.
ByteArrayInputStreambis=newByteArrayInputStream(bos.toByteArray());
ObjectInputStreamin=newObjectInputStream(bis);
obj=in.readObject();
}catch(IOExceptione){
e.printStackTrace();
}catch(ClassNotFoundExceptioncnfe){
cnfe.printStackTrace();
}
returnobj;
}
Ⅷ JAVA 中的浅拷贝是什么效果
首先必须知道Java拷贝的用途:Java克隆是为了得到一个对象,这个对象与克隆前的对象完全一样,唯一不同就是它们所处的内存地址不相同。对于java中的一切对象(除了基本的数据结构int、float、string等之外)在进行赋值,方法传递的时候,都是一个内存地址的同一个对象! 所谓浅拷贝一般就是就是直接调用对象的clone()方法,这样的拷贝,对于这个对象中的基本数据类型(int、string、float等)的属性,是可以得到完全的拷贝,但是对于这个对象里面的非基本数据类型(对象、集合等)的某些属性,实际上并没有进行克隆,而只是进行一个赋值操作而已,也就是说克隆出来的对象与原对象有一部分内容的内存地址是相同的,这在某些情况下会造成出错! 由此提出了深拷贝的概念,即覆写clone()方法,遍历对象中的每一个属性,采取合适的方式进行克隆即可。例如对于对象中的集合,可以遍历集合,然后构造一个新的集合,重新存储一遍... 更过关于Java克隆的问题详见Blog。
Ⅸ java 通过newinstance 反射技术进行浅复制
你想调用、想拷贝?可returnCopy方法内应该还没写完整。。。。。
Ⅹ Java中数组的clone方法为什么是浅复制
这个问题应该去看下API Object.clone(); 可以认为clone方法复制出来的数组 里面的元素 还是使用原数组的元素 并没有生成新的元素。
protected Object clone()
throws CloneNotSupportedException
The method clone for class Object performs a specific cloning operation. First, if the class of this object does not implement the interface Cloneable, then a CloneNotSupportedException is thrown. Note that all arrays are considered to implement the interface Cloneable and that the return type of the clone method of an array type T[] is T[] where T is any reference or primitive type. Otherwise, this method creates a new instance of the class of this object and initializes all its fields with exactly the contents of the corresponding fields of this object, as if by assignment; the contents of the fields are not themselves cloned. Thus, this method performs a "shallow " of this object, not a "deep " operation.