我对 Java 比较陌生,我刚刚学会了这个
import java.util.Arrays;
public class Foo {
private int[][] foo;
public Foo(int[][] arr) {
this.foo = arr;
}
@Override
public String toString() {
return Arrays.deepToString(this.foo).replace("],", "],\n");
}
public static void main(String[] args) {
int[][] p = { { 0, 0 }, { 0, 0 } };
Foo g = new Foo(p.clone()); // doesn't work with p nor p.clone()
System.out.println(g);
p[0][0] = 1;
System.out.println(g);
}
}
在这里,我创建了一个引用另一个对象的对象,并且我可以从外部更改该对象,因为我拥有对我刚刚作为参数传递给构造函数的事物的引用。
尽管我理解它为什么会发生,但这对我来说似乎违反直觉。如果我将某些内容保存为对象的属性,我希望该对象具有外部无法访问的“私有”副本。
我试过了.clone(),但没有解决。所以问题是...
这通常是怎么做的?我是否需要for在构造函数中编写一些循环来从参数中获取每个值?
(或者这不是问题?)
问题的最后一部分很重要,可能这不是问题。还是人们做“某事”(几个循环来获得深度克隆)?
慕码人8056858
相关分类