Java基本数据类型数组

4
为什么下面的代码看起来像使用引用类型而不是基本类型?
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

4个回答

6

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]相同的位置

0

通过int[] b = a,你并没有创建一个新的实例。

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


所以数组只是一个带有引用的对象? - IgorDiy
@IgorDiy 是的,数组是一个对象,大多数数组操作不会复制它们(如果必须调用将数组作为参数的方法并进行复制,那将是非常昂贵的!) - sverre
@IgorDiy,它是一个对象,甚至可以继承Object,例如new int[2].getClass().getSuperClass()返回Object.class。作为奖励,它具有所有对象的方法。 - bestsss

0

ab 都指向同一个数组。改变其中一个变量的值,另一个变量对应的值也会发生相应的改变。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接