class Box {
int size;
Box(int s) {
size = s;
}
}
public class Laser {
public static void main(String[] args) {
Box b1 = new Box(5);
Box[] ba = go(b1, new Box(6));
ba[0] = b1;
for (Box b : ba)
System.out.print(b.size + " ");
}
static Box[] go(Box b1, Box b2) {
b1.size = 4;
Box[] ma = { b2, b1 };
return ma;
}
}
What the result?
A. 4 4
B. 5 4
C. 6 4
D. 4 5
E. 5 5
F. Compilation fails
答案是A
我很难理解这段代码的结果。谁能给我解释一下结果吗?
最佳答案
这里有一些解释 -
1. 首先,您在 main() 类中创建了一个 Box
-
Box b1 = new Box(5);
2. 然后将 b1 发送到 go() 方法 -
Box[] ba = go(b1, new Bo(6));
现在b1.size
是5
3. 在方法 go() 中,您使用赋值语句将 b1.size
设置为 4 -
b1.size = 4;
4. 现在您正在创建一个新的 Box
数组 ma
-
Box[] ma = { b2, b1 };
在此数组中,第一个元素是 b2,b2.size
是 6。请参阅第 2 点。
5. 然后返回 ma
,在第 2 点,返回的数组 ma
被赋值为 ba
。现在数组的第一个元素是 6,第二个元素是 4。
6. ba[0] = b1;
- 此语句将 ba[0]
的第一个元素设置为 b1
。请注意,第 2 点 b1.size
设置为 4。
现在ba[0].size
是4
并且 ba[1].size
为 4
这就是为什么输出是 4 4
关于java - 通过引用调用 - 或 - 通过值调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29242520/