【发布时间】:2018-05-28 09:31:51
【问题描述】:
所以我在我的 Swing 程序中遇到了一些非常大的内存和 CPU 泄漏,并意识到我并没有在 EDT 上执行绝对必要的所有内容,而是愚蠢到将所有内容都传递给方法,最终意识到我是由于“按值传递”规则,复制对象及其 2000 个数组。
我的问题是,对于以下代码:
public class Test {
Object obj = new Object();
public void setOBJ(Object obj) {
this.obj = obj;
}
}
它是将this.obj 设置为obj 的新实例,还是对obj 的引用?
此外,它是否在每一个情况下都这样做,还是在某些情况下可能会发生其中一种情况?我会尝试这个,但不知道从哪里开始以及它可能发生在什么情况下。
最后,在多线程中,有什么变化吗,还是会以同样的方式传递?老实说只是好奇。
【问题讨论】:
-
"它是否将
this.obj设置为obj的新实例,还是对obj的引用?" -> 它返回对对象的引用,而不是克隆。 “此外,它是否在每种情况下都这样做”->是的,您总是通过引用。 “最后,在多线程中,有什么改变,还是会以同样的方式传递?” -> 是的,即使在多线程环境中,引用也会传递给方法。 -
看看this link TL;DR:你只复制这个对象的引用,你不克隆它。由于另一个原因,您的程序运行缓慢。
-
@Turing85 非常感谢!
-
@ArnaudDenoyelle 感谢您的链接。现在我只需要找出数组问题在哪里...
标签: java object pass-by-reference pass-by-value