【问题标题】:Java array of primitive data typesJava 原始数据类型数组
【发布时间】:2011-09-04 05:51:15
【问题描述】:

为什么下一个代码像使用引用类型而不是原始类型一样工作?

int[] a = new int[5];
int[] b = a;
a[0] = 1;
b[0] = 2;
a[1] = 1;
b[1] = 3;
System.out.println(a[0]);
System.out.println(b[0]);
System.out.println(a[1]);
System.out.println(b[1]);

输出是: 2 2 3 3 而不是 1 2 1 3

【问题讨论】:

    标签: java arrays types pass-by-reference pass-by-value


    【解决方案1】:

    int 数组的内容可能不是引用,但 int[] 变量。通过设置b = a,您正在复制引用,并且两个数组指向同一个内存块。

    【讨论】:

      【解决方案2】:

      我在这里描述你在做什么:

      1. 创建整数数组int[] a = new int[5];
      2. 创建对已创建数组int[] b = a;的引用
      3. 将整数添加到数组“a”,位置 0
      4. 覆盖之前添加的整数,因为 b[0] 指向与 a[0] 相同的位置
      5. 将整数添加到数组“a”,位置 1
      6. 再次覆盖之前添加的整数,因为 b[1] 指向与 a[1] 相同的位置

      【讨论】:

        【解决方案3】:

        int[] b = a 不是在创建新实例

        如果您需要新实例(以及您的预期结果),请添加 clone(): int[] b = a.clone()
        祝你好运

        【讨论】:

        • 那么数组是一个只有引用的对象吗?
        • @IgorDiy 是的,数组是一个对象,对数组的大多数操作都不会复制它们(如果必须复制数组作为参数调用方法会非常昂贵!)
        • @IgorDiy,它是一个对象,它甚至继承了对象,例如 new int[2].getClass().getSuperClass() 返回 Object.class。作为奖励,它确实拥有对象拥有的所有方法。
        【解决方案4】:

        ab 都指向()同一个数组。更改ab 中的值将更改另一个相同的值。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-11-01
          • 2012-05-20
          • 2020-12-19
          • 2015-12-09
          • 1970-01-01
          • 2018-01-07
          相关资源
          最近更新 更多