4

如果我实例化一个对象并将其传递给一个函数,则在此函数中我将此对象分配给 null。似乎从函数返回时,对象仍然存在。

我只想知道当我分配 null 时会发生什么。

4

4 回答 4

9

你永远不能分配给一个对象。你所拥有的只是原语和引用。引用要么是空的,要么是指向合适类的对象的指针。

Java 参数是按值传递的。您调用的方法获得了引用的副本。它使该引用为空。调用方法有自己的引用,它不受对传递的副本的任何分配的影响。该引用仍然指向该对象。

于 2012-12-18T05:55:56.497 回答
1

Java 中方法的参数是“按值传递”,这意味着您将对象引用的副本传递给方法。为该引用分配 null 值将在方法调用内更改其值,但对方法外的引用没有任何作用,因为它是一个副本。用代码说明:

void doSomething(final String input) {
    input = null;
    System.out.println("Input is: " + input); // prints null
    return;
}

final String name = "Bob";
doSomething(name);
System.out.println("Name is: " + name); // prints 'Bob'
于 2012-12-18T05:55:48.947 回答
1

当您实例化一个对象并将其传递给一个函数,并在函数内部将其重新分配给 null 或其他内容时,在调用方它不会反映为参数是按值传递的(在对象的情况下是引用的副本),在调用它仍然会指向旧对象。如果要限制方法中的重新分配,可以final在方法参数中使用关键字

于 2012-12-18T05:57:04.890 回答
0

当您将对象引用传递给函数时(Java 总是调用它方法),在方法范围内,会在堆栈内存上创建一个新引用,但它们指向堆内存中的同一个对象。因此,如果您将 null 分配给新的参考,只有这个参考与该对象的链接是中断的,它不影响前一个。

于 2012-12-18T05:58:00.320 回答