gpt4 book ai didi

java - 在 for 循环中更新列表值失败但在具有对象值的列表中成功

转载 作者:行者123 更新时间:2023-11-29 07:46:50 25 4
gpt4 key购买 nike

我尝试运行 for 循环并更新列表中的 double 值,但我发现我失败了。我在网上搜索,我知道当通过 List#get(i) 方法获取双倍值时,只是获取该值的 copy ,这样就不会更新列表中的值,就像下面的代码一样。

        List<Double> list1 = new ArrayList<Double>();
list1.add(10.0);
for(int i = 0; i < list1.size() ; i++){
Double value = list1.get(i);
value = value/100;
System.out.println(list1.get(i));
}

//Result 10.0

唯一的方法是使用 List#set(i, value) 方法。

现在我添加一个测试类

class Test{
Double value;

public Test(Double value){
this.value = value;
}
}

对测试类做类似的事情

        List<Test> list2 = new ArrayList<Test>();
Test test = new Test(10.0);
list2.add(test1);

for(int i = 0; i < list2.size() ; i++){
Test test = list2.get(i);
test.value = test.value / 100;
System.out.println(test.value);
}

//Result 0.1

我的问题是:为什么列表中的值会更新。 for 循环中的测试对象是否仍然是原始对象的副本?是因为原始数据类型还是引用差异?

最佳答案

实际上,这里的问题是原始包装器类型是不可变的。

List<Double> list1 = new ArrayList<Double>();
list1.add(10.0);
for(int i = 0; i < list1.size() ; i++){
Double value = list1.get(i);
value = value/100; // <-- creates a new value!
System.out.println(list1.get(i));
}

你可以用更短的,

List<Double> list1 = new ArrayList<Double>();
list1.add(10.0);
for(int i = 0; i < list1.size() ; i++){
list1.set(i, list1.get(i) / 10);
System.out.println(list1.get(i));
}

关于java - 在 for 循环中更新列表值失败但在具有对象值的列表中成功,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25021611/

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