Java 原始数据类型数组

Posted

技术标签:

【中文标题】Java 原始数据类型数组【英文标题】:Java array of primitive data types 【发布时间】: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

【问题讨论】:

【参考方案1】:

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

【讨论】:

【参考方案2】:

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

    创建整数数组int[] a = new int[5]; 创建对已创建数组int[] b = a;的引用 将整数添加到数组“a”,位置 0 覆盖之前添加的整数,因为 b[0] 指向与 a[0] 相同的位置 将整数添加到数组“a”,位置 1 再次覆盖之前添加的整数,因为 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 中的值将更改另一个相同的值。

【讨论】:

以上是关于Java 原始数据类型数组的主要内容,如果未能解决你的问题,请参考以下文章

将 Streams 与原始数据类型和相应的包装器一起使用

Java字节数组到Javascript类型数组

java中的引用数据类型

Java的基本数据类型和引用数据类型

1,4,2 是由 Java 中的原始类型表示的吗? [关闭]

随笔小记2