【发布时间】:2015-06-03 16:42:20
【问题描述】:
我只是想知道我们是否应该在将obj = null 添加到数组后执行此操作。 请注意,这是一种特殊情况,请阅读下文。
首先,让我们像这样考虑A 类:
public class A {
public void doSomething(B object) {
// some code here
}
}
和B 这样的班级:
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() 方法根据那里的一些数据编辑对象。
现在让我们考虑以下情况:doSomething() 将对象 B 添加到数组列表中。现在如果我应该使用这些代码:
public void doSomething(B b) {
arrayList.add(b);
b = null;
}
// or
public void doSomething(B b) {
arrayList.add(b);
}
在第一个doSomething()中我们将对象设置为null,这意味着方法调用者变为null。好吧,这对我来说没关系,因为doSomething() 调用是我需要在我的aMethod() 中的最后一个语句。但是这样做好吗?
【问题讨论】:
-
不,方法调用者不会变为 null。 Java 是按值传递的。
-
您还需要了解The Law of Demeter。
-
我很困惑,你想通过设置
b = null;来完成什么?这样做没有任何意义,但如果你解释为什么你认为这是一个好主意或你认为它做了什么,那么我或其他人可以帮助你了解为什么它在宏伟的计划中基本上没有任何作用。跨度> -
他们认为他们正在影响传入的引用,而 Java 它不能以这种方式工作,这使得整个问题成为一个有争议的问题
-
根本原因是根本原因相同的答案
标签: java arrays object memory-leaks null