Ссылки на Java.Два примера, в чем разница? - PullRequest
4 голосов
/ 04 октября 2011

Я спорю с моим другом.

Является:

public class Thing
{
    private Thing s;
    public void foo(Thing t)
    {
        s = t;
        t.s = this;
    }
}

Так же, как:

public class Thing
{
    private Thing s;
    public void foo(Thing t)
    {
        s = t;
        s.s = this;
    }
}

Я думаю, что то же самое, так как в обоих случаях s установлен на t, но он не согласен

Ответы [ 4 ]

6 голосов
/ 04 октября 2011

Они одинаковы, так как вы устанавливаете для них одну и ту же ссылку.

Однако, если бы вы использовали два раза new, тогда ссылки были бы другими, и тогда ваш друг был бы прав.

1 голос
/ 04 октября 2011

Я тоже думаю, что это то же самое, но вы можете это проверить.просто сделайте печать двух объектов.Поскольку вы не реализовали метод tostring (), он напечатает расположение в куче.если местоположение одинаково, вы правы.

1 голос
/ 04 октября 2011

Объекты передаются по ссылке в Java. Оба должны быть одинаковыми.

0 голосов
/ 04 октября 2011

Переименование переменной и явная запись this может сделать это более понятным:

Есть:

public class Node
{
    private Node next;
    public void foo(Node t)
    {
        this.next = t;
        t.next = this;
    }
}

Так же, как:

public class Node
{
    private Node next;
    public void foo(Node t)
    {
        this.next = t;
        this.next/*==t*/.next = this;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...