【发布时间】:2023-03-23 10:50:01
【问题描述】:
给出以下代码:
class A {
Boolean b;
A easyMethod(A a){
a = null;
return a;
}
public static void main(String [] args){
A a1 = new A();
A a2 = new A();
A a3 = new A();
a3 = a1.easyMethod(a2);
a1 = null;
// Some other code
}
}
问题是在// Some other code 之前有多少对象可以进行垃圾回收。
那么正确答案是(至少这是面试官的答案):2 - 布尔值 b,因为它是一个包装器和 a1。
你能解释一下为什么a2 和a3 没有被垃圾收集吗?
稍后编辑:
- 好的,我想我现在明白了。一开始有点困惑,但现在我确定面试官错了。我最初的错误是,一开始我没有考虑到 Java 只是按值传递,所以不可能从以“a2”作为参数的函数内部使 a2 为空,因为 a2 实际上是 a2 的副本。
- 带有布尔b的部分确实很明显。
感谢您的回答,之后我会发送一些面试反馈:)。
【问题讨论】:
-
b没有被垃圾回收。它根本没有设置。 -
您没有显示
go方法。这是否意味着调用easyMethod,而在此示例中从未调用过它? -
在我看来,进行采访的人甚至不明白给你的代码没有丝毫连贯性。把它交给你的编译器,玩得开心(这只是前言)。我希望你这次面试没有成功。在其他地方,你正陷入可怕的混乱之中。
-
请解决你的问题,没有b ...
-
说b是GC是没有意义的