java浅拷贝
浅拷贝就是成员数据之间的一一赋值:把值赋给一一赋给要拷贝的值。但是可能会有这样的情况:对象还包含资源,这里的资源可以值堆资源,或者一个文件。。当值拷贝的时候,两个对象就有用共同的资源,同时对资源可以访问,这样就会出问题。深拷贝就是用来解决这样的问题的,它把资源也赋值一次,使对象拥有不同的资源,但资源的内容是一样的。对于堆资源来说,就是在开辟一片堆内存,把原来的内容拷贝。
如果你拷贝的对象中引用了某个外部的内容(比如分配在堆上的数据),那么在拷贝这个对象的时候,让新旧两个对象指向同一个外部的内容,就是浅拷贝;如果在拷贝这个对象的时候为新对象制作了外部对象的独立拷贝,就是深拷贝。
所以对于case1的话,你改变一下line1内部的东西,如果你发现line2内部相应的东西也改变了,那就是shallow ,如果不变的话,就是deep 。
对于case2的话,如果equals method只是比对一下数值的话,它就是一个shallow reference comparision,deep comparision的话,应该还比对一下数值的地址。
❷ 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;
}
}
❸ java 中对象赋值 是浅拷贝还是深层拷贝
对于对象赋值,引用类型是浅拷贝,复制的是引用(即地址),基本类型是深层拷贝(直接复制值)。
❹ java中什么是深拷贝,什么是浅拷贝
简单点跟你说吧,容易理解。
浅拷贝:
就是复制对象的值的时候,不管复制多少,所以的值都指向同一个对象。
深拷贝:
在复制对象的值的时候,同时也重新创建了一个对象,每个值都指向一个不同的对象。
如果你学习了c语言的指针,会理解的更深刻
❺ JAVA 中的浅拷贝是什么效果
首先必须知道Java拷贝的用途:Java克隆是为了得到一个对象,这个对象与克隆前的对象完全一样,唯一不同就是它们所处的内存地址不相同。对于java中的一切对象(除了基本的数据结构int、float、string等之外)在进行赋值,方法传递的时候,都是一个内存地址的同一个对象! 所谓浅拷贝一般就是就是直接调用对象的clone()方法,这样的拷贝,对于这个对象中的基本数据类型(int、string、float等)的属性,是可以得到完全的拷贝,但是对于这个对象里面的非基本数据类型(对象、集合等)的某些属性,实际上并没有进行克隆,而只是进行一个赋值操作而已,也就是说克隆出来的对象与原对象有一部分内容的内存地址是相同的,这在某些情况下会造成出错! 由此提出了深拷贝的概念,即覆写clone()方法,遍历对象中的每一个属性,采取合适的方式进行克隆即可。例如对于对象中的集合,可以遍历集合,然后构造一个新的集合,重新存储一遍... 更过关于Java克隆的问题详见Blog。
❻ java浅拷贝的对象两个内向相等吗
两个对象内向相等。
java对象默认继承java。long。Object类,里面包含clone方法。JDKAPI的说明文档解释这个方法将返回Object对象的一个拷贝。要说明的有两点:一是拷贝对象是一个新对象,而不是一个引用。二是拷贝对象与用new操作符返回的新对象的区别就是这个拷贝已经包含了一些原来对象的信息,而不是对象的初始信息。
java中的基本数据类型判断是否相等,直接使用==就行了,相等返回true,否则,返回false。
❼ 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浅拷贝和深拷贝的问题
就好比一个爸爸一个儿子
<br>
<br>你克隆一下,只得到一个爸爸,这是浅
<br>
<br>你克隆一下,既得到了爸爸,又得到了儿子,这是深
---------------------------
如果你克隆的对象里面还包括其他对象,比如汽车对象里还有座位对象,那么浅的结果就是汽车被拷贝了,座位并没有,深的话,就是一起都拷贝了。
这么去理解,可以吗?
❾ java 深拷贝和浅拷贝的区别
浅拷贝:只复制一个对象,对象内部存在的指向其他对象数组或者引用则不复制
深拷贝:对象,对象内部的引用均复制