2013-12-05 3 views
0
public class Vector { 

    private int x, y, z; 

    public Vector(int x, int y, int z) { 
     this.x = x; 
     this.y = y; 
     this.z = z; 
    } 

    public void add(Vector v) { 
     x += v.x; 
     y += v.y; 
     z += v.z; 
    } 

    public void silly(int x, int y, int z) { 
     this.x = ++x; 
     this.y = y + 1; 
     this.z += z; 
    } 

    public int getX() { 
     return x; 
    } 

    public int getY() { 
     return y; 
    } 

    public int getZ() { 
     return z; 
    } 

    @Override 
    public String toString() { 
     return "Vector, <x = " + x + ", y = " + y + ", z = " + z + ">"; 
    } 

    public static void main(String[] args) { 
     Vector a = new Vector(1, 0, 0); 
     Vector b = new Vector(0, 1, 0); 
     Vector c = a; 
     int x = 1; 
     int y = 2; 
     int z = 3; 
     a.add(b); 
     b.add(b); 
     c.add(c); 
     c.silly(x, y, z); 
     System.out.println("a: " + a); 
     System.out.println("b: " + b); 
     System.out.println("c: " + c); 
     System.out.println("x: " + x + "\ty: " + y + "\tz: " + z); 
    } 
} 

Я, очевидно, был непонятен в моем вопросе, извините за это. Я получил это как практику от своего учителя, и я должен объяснить вывод последних 4 строк в коде. Я понятия не имею, почему вывод выглядит так, как он есть. Я не очень хорошо разбираюсь в псевдониме и так далее. Кто-нибудь может дать мне объяснение? Благодарю.Вопросы, касающиеся псевдонима в Java

+2

Для меня непонятно, что вы «действительно не понимаете»? попробуйте задать ясный вопрос – LionC

+0

Каков результат последних четырех строк в основном методе? На самом деле я не могу обдумать это. – axelniklasson

+0

Я запустил ваш код, и все работает так, как ожидалось. В чем твоя проблема? – neutrino

ответ

1
Vector c = a; 

означает, что вы создаете ссылку, связанную со ссылкой a и ее объектом. Вы не называете его конструктором. Вы не создаете там никакого объекта. Только новая ссылка

+0

Итак, если я редактирую c, а обновляется с изменениями и наоборот? – axelniklasson

+0

Да, это так. – neutrino

+0

@AxelNiklasson Не совсем: 'a' и' c' являются двумя * ссылками на один и тот же объект *. Вы не редактируете ни 'a', ни' c'; вы редактируете один объект, к которому они обращаются. –

1

Единственный вопрос, который я вижу, - «Какая связь между векторами a и c?» Поэтому я отвечу на это.

Когда вы используете ключевое слово 'new', вы создаете новый объект, который хранится в куче. Таким образом, «a» и «b» являются двумя отдельными объектами, когда они были созданы. Когда вы говорите:

Vector c = a; 

Вы не создаете новый объект в куче, просто сделать новую ссылку на тот же объект. Итак, теперь оба «a» и «c» ссылаются на одно и то же. Если вы измените a, c изменится и наоборот.

Когда:

c.add(c); 

Называется то Интс в с просто добавляются к себе.

+0

Спасибо большое, отличное объяснение! – axelniklasson

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