int count=0
Position a = sortedlist.get(count);
if(...)
{
System.out.println(sortedlist);
//change the arraylist index(count) here
sortedlist.set(count, new Position(a.start(),sortedlist.get(i).start(),a.height()));
System.out.println(sortedlist);
//print out position a, prospected changed value
System.out.println(a);
}
catlog将显示
[<2.0, 5.0, 4.0>, <4.0, 7.0, 3.0>, <1.0, 3.0, 2.0>, <2.0, 4.0, 1.0>]
[<2.0, 4.0, 4.0>, <4.0, 7.0, 3.0>, <1.0, 3.0, 2.0>, <2.0, 4.0, 1.0>]
<2.0, 5.0, 4.0>
不知道为什么即使在index0的Arraylist元素发生变化之后,a仍将保持原始的index0值。
答案 0 :(得分:4)
您的列表和a
变量都引用(指向)对象,该对象位于内存中的其他位置。您的set
调用会在列表中的该位置引用 new 对象,这对a
指向的对象没有影响。
让我们抛出一些ASCII-Art:
set
之前:
+------------+ | sortedlist | +------------+ | index 0 |------------>+-----------------+ +------------+ +------->| Position #1 | | +-----------------+ | | <2.0, 5.0, 4.0> | | +-----------------+ +-----------+ | | a |-----+ +-----------+
set
后:
+------------+ | sortedlist | +------------+ +-----------------+ | index 0 |------------>| Position #2 | +------------+ +-----------------+ | <2.0, 4.0, 4.0> | +-----------------+ +-----------+ +-----------------+ | a |------------->| Position #1 | +-----------+ +-----------------+ | <2.0, 5.0, 4.0> | +-----------------+
如果您希望a
和列表都有更新的位置,您有两种选择:
在更新列表的同时更新a
,或
不要在列表中放置 new 对象;相反,改变现有对象的状态