Java 如何摆脱指针?

Java 如何摆脱指针?,java,pointers,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;

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

}您需要显式创建副本

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]);  
}
type B[]=新类型[A.length];
对于(int i=0;i
其中,
makeCopyOf()
应该创建
类型
实例的合理副本。如果你没有找到更好的方法,
type makeCopyOf(type orig){return orig.clone();}
可以作为一个后备方法。

B是一个引用,因此类似于一个指针(有各种不同之处-你不能做算术,也不是直接内存指针)


因此,您必须创建您所引用的。请注意,如果要复制对象,可能需要深度复制。您可能需要在复制构造函数中执行此操作(请参阅本文)

您正在寻找类似
int[]b=newint[](a)的东西吗
int[]A=新的int[3]将不会编译!将其更改为
int[]A=新的int[3]@jlordo:谢谢,修好了。这只是一个输入错误。我会质疑clone()的用法-请参阅