Java 我应该在arraylist.add(obj)之后执行obj=null吗

Java 我应该在arraylist.add(obj)之后执行obj=null吗,java,arrays,object,memory-leaks,null,Java,Arrays,Object,Memory Leaks,Null,我只是想知道在将它添加到数组中之后是否应该执行obj=null请注意,这是一个特殊情况,请阅读下文。 首先,让我们考虑类 A: public class A { public void doSomething(B object) { // some code here } } public class B { private final A a; public B(A a) { this.a = a; } publ

我只是想知道在将它添加到数组中之后是否应该执行
obj=null
请注意,这是一个特殊情况,请阅读下文。

首先,让我们考虑类<代码> A<代码>:

public class A {
    public void doSomething(B object) {
        // some code here
    }
}
public class B {
    private final A a;
    public B(A a) {
        this.a = a;
    }
    public void aMethod() {
        // Does something here
        a.doSomething(this);
    }
}
B
如下:

public class A {
    public void doSomething(B object) {
        // some code here
    }
}
public class B {
    private final A a;
    public B(A a) {
        this.a = a;
    }
    public void aMethod() {
        // Does something here
        a.doSomething(this);
    }
}
直到现在一切都很好。类型为
B
的对象可以调用
A
doSomething()
方法根据其中的一些数据编辑对象

现在让我们考虑以下情况:<代码> DOMMETHONSE()/COD>将对象B添加到ARARYLIST中。现在,如果我应该使用以下代码:

public void doSomething(B b) {
    arrayList.add(b);
    b = null;
}
// or
public void doSomething(B b) {
    arrayList.add(b);
}
在第一个
doSomething()
中,我们将对象设置为null,这意味着方法调用方变为null。嗯,这对我来说没关系,因为
doSomething()
调用是我在
aMethod()中需要的最后一个语句。但是这样做好吗?

只需使用:

public void doSomething(B b) {
    arrayList.add(b);
}
绝对不需要将参数设置为null,因为当方法退出时,它(参数,而不是它引用的对象)不再存在

请注意,这是一个特殊情况,请阅读下文

我看不出你的案子有什么特别之处

在第一个doSomething()中,我们将对象设置为null,这意味着方法调用方变为null。好吧,这对我来说没关系,因为doSomething()调用是我在aMethod()中需要的最后一个语句。但这样做好吗


对象不能设置为
null
,只能设置变量和参数(即变量)。你把引用和引用变量混淆了,这是Java的核心区别;它把做某事的责任混为一谈。它为什么要关心它所插入的东西的生命周期是什么

这也不会有任何影响。由于Java是按值传递的,所以您只修改
b
的作用域值,而不修改
b
的来源


这样的代码只会让阅读它的人感到困惑(也许还有你自己),因为你描述的行为是误导性的。如果您担心要插入的对象的生命周期,请注意,只要存在引用,它就不符合垃圾收集的条件。这意味着,只要要将其添加到的集合不合格,该引用也不合格。

否,方法调用方不会变为null。Java是按值传递的。您也需要阅读相关内容。我很困惑,通过设置
b=null,您想要实现什么?这样做没有任何意义,但是如果你解释为什么你认为这是一个好主意,或者你认为它做了什么,那么我或其他人可以帮助你了解为什么它基本上没有做任何事情。他们认为它们影响了传入的引用,而它不是那样工作的,这使得整个问题成为一个无意义的问题根本原因是根本原因相同的答案对象不能设置为
null
。这条语句总结了Java中传递值的语义+1感谢您和@makato。我不是很确定这一点,因为它不是严格意义上的“传递值”。在您设置它的值之前,它是一个引用,因为如果您执行
object.something()
操作,它实际上会修改原始的
对象。您正在修改原始对象的属性,但该属性与原始对象不同。编辑字段或调用函数时相同,但使用
=
将其更改为其他属性时不同。(这就是我所相信的,因为)否则,度量标准将如何工作?您只有一个它的最终声明,并调用方法通过传递度量来更新它,方法修改字段。