使用基元

时间:2016-07-26 13:23:12

标签: java

根据我对Java的理解(可以说很少= P),Java对待原始值的方式与对象不同。我能想到的一个例子是原语是通过值传递的,而对象是通过引用的值传递的。

扩展这个,我已经实现了创建int数组的代码,并将浅了它复制到一个新的int数组:

public class Test {
    public static void main(String[] args){
    int[] array = {2,3,4,5};
    int[] copy = array;
    copy[1] = 0;

    for (int i : copy){
        System.out.print(i);}
    System.out.println();

    for (int i : array){
        System.out.print(i);}
}
}

然而,输出是:

2045
2045

那么,令我困惑的是为什么两个阵列都会改变?我想当我们制作原始数组的副本时,我们只复制了元素的值(因为我们处理的是原语)?

3 个答案:

答案 0 :(得分:1)

你根本没有复制数组。你所做的是使引用arraycopy指向内存中的相同数组。因此,当您通过一个引用更改数组时,另一个引用将指向相同的更改。

答案 1 :(得分:0)

数组是对象。当你设置

int[] copy = array;

copyarray都指向同一个对象。您的更新

copy[1] = 0;

更新“both”。

答案 2 :(得分:0)

当您完成赋值copy[1] = 0时,您告诉Java采用copy引用的数组,转到位置1,并赋值0.因为您还有以下语句

int[] copy = array;

然后copyarray引用内存中的相同数组。你从来没有真正做过浅拷贝,你只分配了另一个变量来指向同一个数组。

如果你想制作一个数组的副本,那么你可以尝试:

int[] copy = Arrays.copyOf(array, array.length);