Java中的引用。两个例子,它们有什么区别?

4
我正在与我的朋友争论。

以下内容为:

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,但他不同意。


是的,它们是相同的。ts 都是指向同一对象的引用(内存指针)。 - Augusto
4个回答

6

由于您将它们都设置为相同的引用,因此它们是相同的。

但是,如果您使用了两个new,则引用将不同,那么您的朋友就是正确的。


1
Java中的对象按引用传递。这两个应该是相同的。

1
就本讨论而言,您是正确的。尽管有些人可能不同意Java按引用传递的说法。一种思路认为它仅传递对象引用的副本作为值。这里有一个有趣的帖子,Java是否按引用传递? - New Guy

1

我也认为是一样的,但你可以确定地检查一下。只需对这两个对象进行println操作。因为你还没有实现tostring()方法,它会打印出堆中的位置。如果位置相等,那么你就是正确的。


0

变量重命名和显式编写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;
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接