java - x =new int[2]; 是怎么做到的?在这个java代码中工作?

标签 java arrays

分析以下代码:

class Test {

    public static void main(String[] args) {
        int[] x = {1, 2, 3, 4};
        int[] y = x;

        x = new int[2];
        for (int i = 0; i < y.length; i++) {
            System.out.print(y[i] + " ");
        }
    }
}
  • A.程序显示 1 2 3 4
  • B.程序显示0 0
  • C.程序显示0 0 3 4
  • D.程序显示0 0 0 0

下面的代码答案是A,为什么不是B?

最佳答案

假设 {1, 2, 3, 4} 的内存地址为 M

x 分配给 {1, 2, 3, 4} 时,您正在分配对 {1, 2, 3, 4},即 x指向 M

当分配 y = x 时,y 将引用 M

之后,您要更改 x 指向的引用,假设它是 N

因此,打印时,y指向M(即{1, 2, 3, 4}的地址),但是 x 持有对 N 的引用(即 new int[2])。区别就在这里。

关于java - x =new int[2]; 是怎么做到的?在这个java代码中工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34462460/

相关文章:

java - 在 java 中删除对 System.out 的访问

java - 如何确保舞台作为窗口而不是选项卡打开?

Java Swing API - GroupLayout 未正确调整所有组件 JPanel 的大小

java - 如何打印 XML 模式

Java 我的程序的数组没有显示任何值

javascript - 用于将迭代值(例如数组元素)插入 HTML 的简单 JavaScript 模板文字

java - gwt Cookie 未设置或获取

java - 使用 apache poi 循环数组数据

javascript - Javascript 中的埃拉托色尼筛法?

php - 对 php 数组对象中的结果进行排序