Java 将对象赋值为空

Java 将对象赋值为空,java,Java,如果我实例化一个对象并将其传递给一个函数,那么在这个函数中,我将这个对象赋值为null。 似乎当从函数返回时,对象仍然存在 我只想知道当我赋值为null时,会发生什么。Java中方法的参数是“按值传递”,这意味着您正在将对象引用的副本传递给方法。将此引用的值赋值为null将更改其在方法调用内的值,但对方法外的引用不起任何作用,因为它是一个副本。以代码说明: void doSomething(final String input) { input = null; System.ou

如果我实例化一个对象并将其传递给一个函数,那么在这个函数中,我将这个对象赋值为null。 似乎当从函数返回时,对象仍然存在


我只想知道当我赋值为null时,会发生什么。

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,也可以是指向适当类的对象的指针


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

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

将对象引用传递给函数时(Java始终称之为方法),在方法范围中,会在堆栈内存上创建一个新引用,但它们指向堆内存中的同一对象。因此,如果将空值分配给新引用,只有此引用与该对象的链接断开,它不会影响上一个引用

添加代码以获得更好的帮助当参数是对象时,它是通过引用传递的;当参数是基元类型时,将按值传递。reference是一个2字节的变量,指向实际对象。在java中,它从不通过reference传递。我认为
final
会妨碍理解答案。另外:您不能重新分配到
final
变量(第2行)。是的,这确实是重点。在极少数情况下,您会发现需要重新分配一个变量,只是不要将其声明为final。