-1

考虑以下代码:

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;
    }
}

结果是什么?我解决它是 5 4 但它不是正确的,正确的答案是 4 4,这是怎么回事?

4

3 回答 3

0

最后,该数组ba有两个 b1 实例。两者都是4号。

于 2012-07-02T19:53:10.493 回答
0

使用调试器单步执行代码,将结果与实际结果进行比较。这将向您展示您的解决方案存在分歧的地方!

go()返回{b2,b1}。然后将数组中的第一个条目设置为b1,留下{b1,b1},这将打印您得到的结果。

于 2012-07-02T19:53:22.000 回答
0

go方法将框的大小更改b1为 4,并将其放置在数组中的索引 1 处。然后 main 方法也将其设置为索引 0。因此该数组包含对 的两个引用b1,其大小为 4。

于 2012-07-02T19:53:47.417 回答