2014-02-27 49 views
0

我试图做一个短代码来切换数组中的第一个和最后一个值,并输出一个与第一个数组相同的新数组,但切换了这些值。经过几次尝试后,我意识到我的第一个(原始)数组保持切换其[0]值,我不知道为什么。这是代码。为什么我的数组切换值?

import java.util.Arrays; 
public class testing { 
    public static void main(String[] args) { 
     int[] original={1,2,3,4}; 
     int[] switched=original; 
     switched[0]=original[original.length-1]; 
     switched[switched.length-1]=original[0]; 
     System.out.println(Arrays.toString(switched)); 

} 

} 

我想要的输出为[4,2,3,1],但我总是[4,2,3,4]。最初

1,2,3,4 

+3

两个'original'和'switched'引用相同的阵列。你对他们中的一个做的任何事情你都在做。你想要一个* new *数组。 –

回答

0

有一些神奇的你应该知道:)。

在这一行:int[] original={1,2,3,4};创建数组{1,2,3,4}和您存储参考它在变量original

在这一行:int[] switched=original;复制的original的值,它是将该数组引用到变量switched中。

现在,你有两个变量都是引用到同一个数组!


要创建具有相同值的新数组,你可以这样做:

int [] switched = (int[])original.clone(); 
1

两者都参照相同的数组

switched[0]=original[original.length-1]; 

4,2,3,4 

switched[switched.length-1]=original[0]; 

4,2,3,4 
0

由于switched和指向同一个对象的。

务必:

import java.util.Arrays; 
public class testing { 
    public static void main(String[] args) { 
     int[] original={1,2,3,4}; 
     int[] switched={1,2,3,4}; 
     switched[0]=original[original.length-1]; 
     switched[switched.length-1]=original[0]; 
     System.out.println(Arrays.toString(switched)); 
    } 
} 
相关问题