Java 如何摆脱指针?
为了让我的问题可以理解,我使用了下面的示例代码。这段代码的输出是5,而我希望它是3。我猜B是作为a的指针工作的,但我希望a最初被复制到B中,a中随后的更改不会影响BJava 如何摆脱指针?,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;
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()的用法-请参阅