gpt4 book ai didi

java - 为什么这个引用不起作用?

转载 作者:行者123 更新时间:2023-11-29 06:58:14 24 4
gpt4 key购买 nike

我有什么:一个存储整数的静态 ArrayList。我通过引用添加了一个 Integer,然后更改了该值,但该值未更新。

import java.util.ArrayList;

public class Main {

public static final ArrayList<Integer> integers = new ArrayList<>();
public Integer integer;

void addInteger(Integer i){
integers.add(i);
}

public static void main(String[] args) {

Main main = new Main();
main.integer = 3;

integers.add(main.integer);

main.integer = 4;

System.out.println(integers.get(0));

}
}

输出:3

问题:为什么输出不是 4 ?

基于跟进的进一步问题: ArrayList 中真正存储的是什么?

根据接受的答案进行编辑:

因为 integer 是一个 Integer(而不是一个 int),所以 3 是自动装箱的。 ArrayList 实际上存储 Integer.valueOf(3)

最佳答案

这是发生了什么:

  • 您创建对 3 的引用(并将该引用存储在 main.integer 中)。
  • 然后将此引用存储在列表中(通过 integers.add(main.integer))。对 3 的引用按值传递,因此引用被复制到列表中。
  • 然后更新 main.integer 以包含对 4 的引用。这不会影响列表中存储的内容。

将其与以下代码段进行比较:

public AtomicInteger integer;

Main main = new Main();
main.integer = new AtomicInteger(3); // Reference to a mutable object

integers.add(main.integer); // Add reference to list

main.integer.set(4); // Change mutable object

System.out.println(integers.get(0)); // Prints 4

关于java - 为什么这个引用不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30359667/

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