java - 通过引用传递给 setter

标签 java object pass-by-reference pass-by-value

因此,我在 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/

相关文章:

java - 使用 java.util.concurrent.executors

java - RxJava - 多播可完成结果

java - 使用访问者模式时如何引用子结果?

c++ - 删除指针 vector 中的指针指向的对象

java - 链表实现代码中的问题

c++ - 定义生成元素 vector 的函数时正确的方法是什么 C++

C++ 传递 vector<vector<STRUCT>> 进行修改

java - Memento 和 Command 设计模式有什么区别?

javascript - 无法使用 `this` 访问对象。 `this` 指向 `window` 对象

jquery - 如何从 jQuery 对象中获取值?