为了使我的问题可以理解,我使用以下示例代码。这段代码的输出是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]);
}
}
答案 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)