Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用for循环将返回对象数组复制到另一个数组中_Java_Arrays_Methods_Copy - Fatal编程技术网

Java 如何使用for循环将返回对象数组复制到另一个数组中

Java 如何使用for循环将返回对象数组复制到另一个数组中,java,arrays,methods,copy,Java,Arrays,Methods,Copy,假设我有一个返回数组的方法,如果我想使用for循环复制该数组的副本来复制每个元素: for(int i=0; i < array.length;i++) { copy[i] = someMethod()[i]; } for(int i=0;i

假设我有一个返回数组的方法,如果我想使用for循环复制该数组的副本来复制每个元素:

for(int i=0; i < array.length;i++)
{
  copy[i] = someMethod()[i];
}
for(int i=0;i
每次我们复制一个元素时,这个for循环会重做somethod吗?或者它执行该方法并将其存储在某个位置,然后复制每个元素以进行复制。 我在问一个关于高效运行时的问题:在第一种情况下,如果someMethod是一个复杂的方法,那么运行时可能会显著增加

编辑:假设array.length是指someMethod返回的数组的长度

…每次我们复制一个元素时,这个for循环会重做somethod吗

是的,每次都创建一个新数组。编译器或JVM不会为您只进行一次调用而重写循环。JVM进行了大量优化,但(大部分)没有改变您在代码中指定的基本行为

如果不希望该方法每次迭代都重新运行,请不要在循环体中调用它。在循环之前调用它一次,记住它返回的数组,然后使用它

旁注:另请参见。

是,它为循环的每次迭代调用someMethod()。如果要存储返回的值,请在循环外部调用someMethod(),如下所示:

注意:我已尝试修复您的语法。此外,您还需要确保拷贝数组已正确初始化为所需的大小

someMethod();
for(int i=0; i < array.length;i++)
{
  copy[i] = *array*[i];
}
someMethod();
for(int i=0;i
它将在每次迭代中执行对
someMethod
的调用。数组是可克隆的,因此您可以使用
copy=someMethod().clone()您使用的是什么
数组
的长度?只要
copy
,返回的任何
someMethod()
都会一样长吗?啊,是的,在创建我所指问题类型的示例时,这是一个错误。假设array.length引用SomeMethod指定的数组长度,但我不能。你怎么事先知道的?实际上,我们甚至不知道someMethod()的结果长度是否可以在该方法的两个相邻调用之间更改。如果someMethod返回嵌套数组,是否有类似的方法使用?@Allan不仅类似,而且完全相同。只需注意是否需要“深度副本”。只要我数组中的对象是原语,我就可以安全地将此方法用于嵌套数组?@Allan:我想你的意思是你有一个数组,例如
int[][]
或类似的数组
arraycopy
复制顶级的值,就像您的
for
循环一样。在这两种情况下(
arraycopy
和您的
for
循环),如果数组是引用类型(一个
int[][]
是一个
int[]
的数组,这是一个引用类型),则结果将是一个新数组,其条目引用的数组与原始数组引用的数组相同。在这两种情况下,如果您也想复制这些阵列,则需要进行深度复制。您的
for
循环和
arraycopy
执行浅拷贝。