提问人: 提问时间:12/14/2017 更新时间:12/14/2017 访问量:974
通过引用传递到 setter
Passing by reference into a setter
问:
因此,我在 Swing 程序上遇到了一些非常大的内存和 CPU 泄漏,并意识到我并没有在 EDT 上执行所有必要的内容,而是愚蠢地将所有内容传递到方法中,最终意识到我正在复制对象及其 2000 个数组,因为“按值传递”规则。
我的问题是,对于以下代码:
public class Test {
Object obj = new Object();
public void setOBJ(Object obj) {
this.obj = obj;
}
}
它是否设置为 的新实例 ,或对 的引用?this.obj
obj
obj
此外,它是否在每种情况下都这样做,或者在某些情况下可能会发生一个或另一个?我会尝试这个,但不知道从哪里开始以及它可能发生在什么情况下。
最后,在多线程中,是否有任何变化,或者它仍然会以相同的方式传递?说实话,只是好奇。
答:
1赞
Eran
12/14/2017
#1
setOBJ(Object obj)
将 an 的引用指定给 。它不会创建新实例。Object
this.obj
另一方面,每次创建 的新实例时,也会创建一个新实例并将其分配给 (作为 的结果)。Test
Object
obj
Object obj = new Object();
问题是你调用了多少次,以及是否每次都传递一个新实例。我们无法通过您发布的代码来判断。setOBJ
Object
评论
0赞
12/14/2017
哦不,那没关系。我知道我到处都有数组问题,但我只是想把它们挑出来。如果它只是通过引用,那么我想我找错了地方。非常感谢!:)
0赞
12/14/2017
请问,getter 也是按值传递的吗?
1赞
Eran
12/14/2017
@finnrayment 您是否在询问 getter 是否在每次调用时都创建新实例?通常不会,除非它包含创建您尝试获取的实例的新副本的代码,并返回对该副本的引用。
0赞
12/14/2017
是的,这回答了这个问题!非常感谢你,Eran。
评论
this.obj
obj
obj