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】:a
和 b
都指向(是)同一个数组。更改a
或b
中的值将更改另一个相同的值。
【讨论】:
以上是关于Java 原始数据类型数组的主要内容,如果未能解决你的问题,请参考以下文章