java - 通过引用调用 - 或 - 通过值调用

标签 java arrays oop call-by-value

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/

相关文章:

java - 这些天如何使用 wadl2java?

java - 解析两个文件并生成员工数据

c++ - 从 header 中的函数生成静态数组值

javascript - 追加到由 ul 制成的数组

java - 是否有理由在忽略返回值的情况下调用 obj.getClass() ?

python - 使用数组数据初始化 Python 类

PHP OOP核心框架

java - html提交表单的背景是什么?

Java Swing : Do something while the key is being pressed

MySQL:我想将数组传递给函数并查看它遍历数组的每个元素