gpt4 book ai didi

java - ArrayList>变量在Java中通过引用复制值?

转载 作者:行者123 更新时间:2023-12-01 18:29:44 24 4
gpt4 key购买 nike

我很困惑。

这是我对基本变量和赋值的理解:

int a = 9;
int b = a;
int a = 8;
System.out.println(b); // This will be 9

现在我正在尝试同样的事情,但我使用的是 ArrayList 二维结构而不是基本类型,请参阅以下代码:

public final class Matrix {
private List<List<Double>> rawMatrix = new ArrayList<List<Double>>();
private List<List<Double>> matrix = new ArrayList<List<Double>>();

private void update(){
matrix = rawMatrix;
System.out.println("matrix: "+matrix.size()+", "+matrix.get(0).size());
System.out.println("matrix: "+rawMatrix.size()+", "+rawMatrix.get(0).size());
matrix.get(0).add(99.0);
System.out.println("matrix: "+matrix.size()+", "+matrix.get(0).size());
System.out.println("matrix: "+rawMatrix.size()+", "+rawMatrix.get(0).size());
}
}

问题是这个输出:

matrix: 4, 3
matrix: 4, 3
matrix: 4, 4
matrix: 4, 4

现在由于某种原因,rawMatrix 添加了一个与 matrix 相同的元素,尽管我从未在 rawMatrix 结构中添加任何内容。

我认为这是某种奇怪的通过引用分配变量的类型,我不太明白为什么会出现这种情况以及为什么它是 Java 中的默认值。

我该如何克服这个问题?我是否必须使用两个 for 循环来使我的矩阵之一等于另一个,这看起来效率很低。

最佳答案

由于 ArrayList 是对象,因此赋值只是将指针复制到该对象。对于原始类型,您实际上是在复制值。

这意味着您的分配matrix = rawMatrix;使matrix指向与rawMatrix相同的内存位置,当该内存更新时更改也将反射(reflect)到matrix 指向的位置。

关于java - ArrayList<List<>>变量在Java中通过引用复制值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24822668/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com