2013-11-24 4 views
0

У меня есть Point class (а не построить в классе), и один из моих конструкторов:Aliasing с примитивами переменных

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

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

В данном случае это КИ копия новые членам точки в моем конструкторе или мне нужно сделать что-то еще, чтобы избежать наложения псевдонимов? Как насчет копирования строки?

+0

Что вы имеете в виду с копией строки? – xmoex

+0

Точно так же я копирую точку x и y, если у меня есть строка для копирования - мне нужно сделать string st = new string (MyString)? – user2214609

+0

Просто попробуйте построить constuctor со строковым параметром и проверьте сами! – MeNa

ответ

2

Да, это нормально. Примитивные присвоения - по прямому значению. Однако, когда вы назначаете ссылку на объект, вы просто назначаете ссылку, поэтому вам нужно скопировать этот объект, который является полем.

Для копирования int s, double s и других примитивов это нормально. Кроме того, это также работает для объектов String (но не гарантируется для каких-либо других объектов), поскольку строки неизменяемы.

+0

Строка также примитивна? можете ли вы подробно рассказать о прямой стоимости? – user2214609

+0

@ user2214609 Строка не является примитивной, 'String a = b;' создает сглаживание. Но поскольку строки неизменяемы, это наложение не может нанести ущерб. – delnan

+0

@hexafraction Это поведение не имеет ничего общего с типами значений по сравнению с типами ссылок: 'MyMutableType a = new MyMutableType (2); MyMutableType b = a; a = новый MyMutableType (3); System.out.println (b); 'также печатает 2, а не 3 (с соответствующим конструктором шаблонов и' toString'). См. Http://ideone.com/pUTcKC – delnan

2

Достаточно скопировать их, поскольку они являются типами значений и будут скопированы по значению. Что касается строки, вы можете ее также скопировать, но на этот раз, поскольку строки в Java неизменяемы. Cheers.

Смежные вопросы