通过引用传递到 setter
Passing by reference into a setter
所以我在我的 Swing 程序上遇到了一些非常大的内存和 CPU 泄漏,我意识到我并没有执行 EDT 上的所有必要内容,而是愚蠢到将所有内容传递给方法,最终意识到由于 "pass-by-value" 规则,我正在复制对象及其 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
实例。我们无法通过您发布的代码判断。
所以我在我的 Swing 程序上遇到了一些非常大的内存和 CPU 泄漏,我意识到我并没有执行 EDT 上的所有必要内容,而是愚蠢到将所有内容传递给方法,最终意识到由于 "pass-by-value" 规则,我正在复制对象及其 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
实例。我们无法通过您发布的代码判断。