如果我实例化一个对象并将其传递给一个函数,则在此函数中我将此对象分配给 null。似乎从函数返回时,对象仍然存在。
我只想知道当我分配 null 时会发生什么。
你永远不能分配给一个对象。你所拥有的只是原语和引用。引用要么是空的,要么是指向合适类的对象的指针。
Java 参数是按值传递的。您调用的方法获得了引用的副本。它使该引用为空。调用方法有自己的引用,它不受对传递的副本的任何分配的影响。该引用仍然指向该对象。
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'
当您实例化一个对象并将其传递给一个函数,并在函数内部将其重新分配给 null 或其他内容时,在调用方它不会反映为参数是按值传递的(在对象的情况下是引用的副本),在调用它仍然会指向旧对象。如果要限制方法中的重新分配,可以final
在方法参数中使用关键字
当您将对象引用传递给函数时(Java 总是调用它方法),在方法范围内,会在堆栈内存上创建一个新引用,但它们指向堆内存中的同一个对象。因此,如果您将 null 分配给新的参考,只有这个参考与该对象的链接是中断的,它不影响前一个。