2013-11-24 48 views
0

Point class(而不是在課堂上構建)和我的構造函數:混淆與原語的變量

public class Point 
{ 
    private int _x; 
    private int _y; 

    public Point(Point p) 
    { 
     _x = p._x; 
     _y = p._y; 
    } 
} 

在這種情況下是正常的拷貝在我的構造函數中的新點的成員或者我需要做的別的什麼來避免別名? 複製一個字符串怎麼樣?

+0

你是什麼意思與複製字符串? – xmoex

+0

同樣的方式我複製點x和y,如果我有字符串複製 - 我需要做字符串st =新字符串(MyString)? – user2214609

+0

只需嘗試使用字符串參數構建構造函數並自行檢查! – MeNa

回答

2

是的,這很好。原始分配是通過直接價值。然而,當你分配一個對象引用時,你只是分配了引用,所以你需要複製該對象是一個字段。

對於複製int s,double s和其他原語,這很好。另外,這也適用於String對象(但不能保證其他對象),因爲字符串是不可變的

+0

字符串也是原始的?你能否詳細說明直接價值? – user2214609

+0

@ user2214609字符串不是原始的,'字符串a = b;'創建別名。但由於字符串是不可變的,所以這種別名不會造成嚴重破壞。 – delnan

+0

@hexafraction該行爲與值類型與引用類型無關:「MyMutableType a = new MyMutableType(2); MyMutableType b = a; a = new MyMutableType(3); System.out.println(b);'也打印2,而不是3(具有適當的樣板構造函數和'toString')。請參閱http://ideone.com/putcKC – delnan

2

複製它們就足夠了,因爲它們是值類型,並且會被值複製。 至於字符串,你可以複製它,但這次是因爲Java中的字符串是不可變的。 乾杯。