我已经编写了2件代码,以复制下面的2-D数组的子阵列元素
第一个方法:
String [][] actual = new String[5][5];
String [] arrayToCopy = {"1","2","3","4","5"};
actual[0] = arrayToCopy;
第二种方法:
String [][] actual = new String[5][5];
String [] arrayToCopy = {"1","2","3","4","5"};
for(int i=0;i<5;i++)
actual[0][i] = arrayToCopy[i];
我打印2-D数组时,两种方法之间的功能有所不同?
您需要担心的一个区别是,当您说
时actual[0] = arrayToCopy;
您实际上不是"复制"您的数组。相反,您正在替换actual[0]
引用arrayToCopy
。如果将数组从两个变量更改,则更改将反映在另一个变量中。您可以自己看到它:
System.out.println(actual[0][0]); // prints "1"
arrayToCopy[0] = "5";
System.out.println(actual[0][0]); // prints "5"
在第二种方法中,actual[0]
和arrayToCopy
参考不同的数组,您实际上是从一个数组中"复制"元素。改变一个,不会改变另一个。
至于您的问题,它在"功能"方面有不同吗?取决于您的含义,但是如果数据仅读取,那么这并不是一件大事。只有在您可以修改数据并且不小心并开始更改不应更改的内容时,这才成为一个问题。
在Java中,作业是由参考(Bilean,Int,float,float,double,short,char,byte,long(。您不复制数组,而只是在另一个变量中引用它。
actual[0] = arrayToCopy;
如果您尝试做这样的事情:
actual[0][3] = 5;
System.out.println(arrayToCopy[3]);
您会发现5。任何一个发生的变化都会发生在其他变化上。
但是您的第二次尝试复制了数组。
如果您想进行表演副本,请考虑使用System.arrayCopy
https://docs.oracle.com/javase/7/docs/api/java/java/lang/system.html#arraycopy(Java.lang.object.bignt.bignt.bignt.bimpt, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int,%20Java.lang.Object,%20inin,%20inin(
如果您想在不同对象之间共享性能编程,并且您的数组不会共享,则可以使用引用解决方案(您的第一个解决方案(。但是,如果您想处于安全的一面,或者担心不同对象之间的线程和数据共享,请尝试复制。