我最近開始了一門關於Java編程語言的課程。通過演講會,我發現這兩個幻燈片所困惑我:使用clone()複製字段與複製構造函數Java
1.
如果類有一個拷貝構造函數,克隆()可以使用拷貝構造函數 創建並返回副本的對象。
public Sale(Sale obj) {
this.itemName = new String(obj.itemName);
this.itemPrice = obj.itemPrice;
}
public Sale clone() {
return new Sale(this);
}
2.
即使拷貝構造函數和克隆()做同樣的事情(當實現像前面顯示 )只克隆,在某些情況下() 可以工作
這是顯示的示例(銷售和DiscountSale在其他地方執行):
public class CopyTest {
public static Sale[] badCopy(Sale[] a) {
Sale[] b = new Sale[a.length];
for (int i = 0; i < a.length; i++)
b[i] = new Sale(a[i]);
return b;
}
public static Sale[] goodCopy(Sale[] a) {
Sale[] b = new Sale[a.length];
for (int i = 0; i < a.length; i++)
b[i] = a[i].clone();
return b;
}
public static void main(String[] args) {
Sale[] a = new Sale[2];
a[0] = new Sale("atomic coffee mug", 130.00);
a[1] = new DiscountSale("invisible paint", 5.00, 10);
int i;
Sale[] b = badCopy(a);
System.out.println("With copy constructors: ");
for (i = 0; i < a.length; i++) {
System.out.println("a[" + i + "] = " + a[i]);
System.out.println("b[" + i + "] = " + b[i]);
}
b = goodCopy(a);
System.out.println("With clone(): ");
for (i = 0; i < a.length; i++) {
System.out.println("a[" + i + "] = " + a[i]);
System.out.println("b[" + i + "] = " + b[i]);
}
}
}
當clone()在其實現中使用複製構造函數時,複製構造函數和clone()之間有什麼區別?爲什麼只有一個工作正常?
http://googleweblight.com/?lite_url=http://www.javacodegeeks.com/2014/01/which-is-better-option-cloning-or-copy-constructors.html&ei=-bG4btW3&lc=en -IN&geid = 7&s = 1&m = 189&ts = 1444490840&sig = APONPFm03Ou7iPhfk4cOcn7XrAERPiLLLA –
這一切似乎都是錯誤的,例如爲什麼在字符串是不可變的時候在拷貝構造函數中創建一個新的'String',並且我想不出可以在clone()方法下工作並且不能在拷貝構造函數中完成的條件, clone()不起作用。你在哪裏找到這個? – Andreas
@Andreas我改變了拷貝構造函數來創建一個新的字符串,以確保它能夠正常工作,因爲我是Java新手。其餘的來自課程材料。 –