对一个 ArrayList 使用 add() 如何影响另一个 ArrayList 的大小?

How does using add() to one ArrayList interfere the size of the other one?

我创建了两个ArrayList,我想添加一些整数到ArrayList a。 在 Java 代码中我这样做了:

ArrayList < Integer > a = new ArrayList < Integer >();
ArrayList b = a;
a.add(new Integer(4));
b.add(new Integer(5));
a.add(new Integer(6));
a.add(new Integer(7));
System.out.println(a.size());

我的问题是为什么b.add(new Integer(5));还要向 ArrayList a 添加一个对象?

ArrayList b = a; 

从这里 a 和 b 都指向 same memory。所以两个对象具有相同的值。

ArrayList b 是对 ArrayList a 的引用。实际上只有一个列表有两个指向它的指针。

数组列表 b 正在引用数组列表 a。如果您想要拆分,请查找 java 的 clone() 方法。

当你将a的值传递给b时。您实际上将引用的值传递给对象。这意味着 a 和 b 指向数组。

a = new ArrayList<>(); a指向内存地址0x1234处的一个对象(一个ArrayList实例)(地址是虚构的)

b = a; b 指向与 a 指向相同的地址。

所以对 ab 的每个操作都会影响内存中的同一个对象。因此 b.add(new Integer(5))a.add(new Integer(5))

的结果相同

问题是 ab 指向同一个对象。 您将原始值与对象引用混淆了。当你 运行 这样的事情时:

int a = 10;
int b = a;
a = 15;
System.out.println("a = " + a);
System.out.println("b = " + b);

输出将是:

a = 15
b = 10;

当您使用原语(int、String、long、byte、double、boolean、short...)时,您正在将该变量的值复制到另一个变量中,如上例所示。 b 查看 a 的值,并将其分配给 b 创建两个单独的变量。

另一方面,由于它们是 OBJECTS,因此 ab 都指向同一事物。如果你想创建单独的对象,你需要做:

ArrayList<Integer> a = new ArrayList<Integer>();
ArrayList<Integer> b = new ArrayList<Integer>();

那么你会得到你想要的结果。

希望这对您有所帮助。 =)

考虑下图,其中的插图是用 Date 对象给出的。诸如 ArrayList<Integer> a 之类的变量声明会创建一个引用,然后在赋值运算符 =[=15 的帮助下,将语句 new ArrayList < Integer >(); 右侧部分创建的对象的地址分配给该引用=]

现在,当您声明 ArrayList b=a您是在声明名为 b 的第二个引用被分配了与第一个引用 a 相同的地址。因此 a 和 b 都引用内存中的同一个对象

按原样解释代码:

ArrayList b = a;

在这一行中,您创建了一个能够保存 ArrayList 的变量,并将您刚刚创建的这个 b 变量指向 a,这是另一个能够保存 ArrayList 的变量。

a 指向 Arraylist 对象(您在第一行创建的新 ArrayList)。

而不是 意味着在第二行之后你有两个 ArrayList。只有一个 ArrayList 对象和两个 指向存储此对象的内存的变量。

因此,通过对任何变量 ab 调用 add 方法,您可以在同一个 ArrayList 上添加。