2017-04-25 31 views
1

我明白,当我们说某事等于另一个数组时,我们本质上是用我们的新名称指向数组。如果我们想复制一个数组,我们需要逐个元素或者我们需要使用一个方法/ java包。Java数组 - 复制vs编辑它们

public class puzzle { 
    public static void main(String[] args) { 
     int [] x= {1,2,4,6}; 
     double [] u= 3.0, 4.0, 5.0, 6.0,7.0}; 
     double [] v = {2.0, 4.0, 5.0}; 

     puzzle(u,v,x); //1 

     puzzle (v,u,x); //2 
    } 
    public static void puzzle(double [] first, double [] second, int [] third){ 
     double [] temp; 
     temp=first; 
     temp[2]=42.0; 
     **second= first;** 
     second[0]= 2.34; 
    } 
} 

我们希望看到什么x的值,U,V是在此之后一直运行(U,V,X) 和(V,U,X)

第二个拼图v只有长度为3,包含2.34,4.0,42.0。为什么只有三个长而不是六个(2.34,4.0,42.0,6.0,7.0)

这是否与数组v只有三个长,因此是三个固定大小,并最终切断其他号码?
(我没有选择的名称)

+0

请用正确的语法更新您的问题 – Oswald

+0

也许你正在期待通过引用行为。 Java始终是按值传递的。当示例代码显示'second = first'时,这只是改变局部变量。主要的变量'u'和'v'不会被该赋值改变。 http://stackoverflow.com/q/40480/2891664 – Radiodef

回答

1

要通过的array1每个元素复制,你必须循环数组,放入array2

int[] array1=new int[]{1,2,3,4,5}; 
int[] array2=new int[5]; 
for(int i=0;i<array2.length;i++){ 
    array2[i]=array1[i]; 
} 

以及编辑阵列您在指定索引提出了新的价值:

array1[2]=9; 
+1

您也可以使用'arr.clone()'或'Arrays.copyOf(arr,arr.length)'来复制一个没有循环的数组。 – Radiodef

1

temp [2]和first [2]之间没有区别:temp和first指向同一个数组。

0

我想我理解你的问题(如果不忽略这个答案)。你必须在这里理解的是,当第一次执行拼图函数时,你做了second = first。之后执行秒将指向与第一个相同。但是这对u和v没有任何影响,他们会一直指向与之前相同的位置。当难题第二次执行时,同样的重复。

以下图片可能会让您更清晰。 *地址值只是一个假设。 当拼图函数被调用,在第一次和刚过温度=第一情况是这样的enter image description here

刚过第二[0] = 2.34是enter image description here

当拼图函数被调用的情况在第二时间,只是临时=第一后的情况是这样的enter image description here

刚过第二[0] = 2.34是enter image description here

位置其中u和v点永远不会改变的情况。