将数组分配给java中的其他数组的问题
public class TestingArray { public static void main(String[] args) { int iCheck = 10; int j = iCheck; j = 11; System.err.println("value of iCheck "+iCheck); int[] val1 = {1,2,9,4,5,6,7}; int[] val2 = val1; val2[0] = 200; System.err.println("Array Value "+val1[0]); } }
输出:
iCheck 10的价值
数组值200
从上面的代码我发现,如果任何数组val2被分配给另一个数组val1,并且如果我们更改val2数组的任何值,则结果也反映在数组val1中,而相同的方案没有变量赋值。 为什么?
以下语句使val2
引用与val1
相同的数组:
int[] val2 = val1;
如果要复制,可以使用val1.clone()
或Arrays.copyOf()
:
int[] val2 = Arrays.copyOf(val1, val1.length);
对象(包括集合类, String
, Integer
等实例)以类似的方式工作,因为将一个变量分配给另一个只是复制引用,使两个变量引用同一个对象。 如果所讨论的对象是可变的,那么通过其中一个变量对其内容进行的后续修改也将通过另一个变得可见。
原始类型( int
, double
等)的行为有所不同:没有涉及引用,赋值会复制该值。
简单地说,“val1”和“val2”是指向实际数组的指针。 您指定val2指向与val1相同的数组。 因此,改变一个,另一个看到相同的变化。 要让它真正成为副本,您必须克隆数组而不是分配。
因为您将val1
的引用分配给val2
,所以它们都指向内存中的同一对象。
因为Java中的数组是对象,即通过引用传递。