因此,我在 Swing 程序上遇到了一些非常大的内存和 CPU 泄漏,并意识到我并没有在 EDT 上执行绝对必要的所有内容,但愚蠢到将所有内容传递到方法中,最终意识到我是由于“按值传递”规则,复制对象及其 2000 个数组。
我的问题是,对于以下代码:
public class Test {
Object obj = new Object();
public void setOBJ(Object obj) {
this.obj = obj;
}
}
它将 this.obj
设置为 obj
的新实例,还是对 obj
的引用?
此外,它是否在每种情况下都会这样做,或者是否在某些情况下可能会发生其中一种情况?我想尝试一下,但不知道从哪里开始以及什么情况下可能会发生。
最后,在多线程中,有什么变化吗,还是仍然会以同样的方式传递?说实话只是好奇。
最佳答案
setOBJ(Object obj)
将 Object
的引用分配给 this.obj
。它不会创建新实例。
另一方面,每次创建 Test
的新实例时,也会创建一个新的 Object
实例并将其分配给 obj
(由于 Object obj = new Object();
)。
问题是您调用 setOBJ
次数,以及每次是否向其传递一个新的 Object
实例。我们无法通过您发布的代码来判断。
关于java - 通过引用传递给 setter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47810883/