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 深拷貝和淺拷貝的區別
淺拷貝:只復制一個對象,對象內部存在的指向其他對象數組或者引用則不復制
深拷貝:對象,對象內部的引用均復制