如何摆脱指针?

时间:2012-11-05 12:50:12

标签: java pointers

为了使我的问题可以理解,我使用以下示例代码。这段代码的输出是5,而我希望它是3.我猜测B是作为A的指针,但是我希望A最初在B中复制,A中的后续更改不应该影响B

import java.io.*;
public class fg

{

public static void main(String args[]) throws Exception
{

    int[] A = new int[3];
            A[0]=1;
            A[1]=3;
            A[3]=7;

    check(A);


}

public static void check(int[] A)
{               
    int[] B = A;

    A[1] = 5;

    System.out.println(B[1]);
}

}

2 个答案:

答案 0 :(得分:5)

您需要明确创建副本

int[] B = Arrays.copyOf(A, A.length);

因为int[]是引用类型,所以赋值只复制引用(基本上是指针)。

如果数组元素本身不是基本类型,则可能需要深层复制,所以

type B[] = new type[A.length];
for(int i = 0; i < A.length; ++i) {
    B[i] = makeCopyOf(A[i]);  
}

其中makeCopyOf()应创建type实例的合理副本。如果您没有找到更好的结果,type makeCopyOf(type orig) { return orig.clone(); }可以作为后备。

答案 1 :(得分:2)

B是引用,因此类似于指针(有各种不同 - 你不能做算术,它不是直接的内存指针)。

因此,您必须创建一个您所指的copy of the structure (the array)。请注意,如果您要复制对象,则可能需要深层复制。您可能必须在复制构造函数中执行此操作(请参阅此文章以了解why clone() is considered broken