getAt运算符变异列表

Cli*_*ton 1 groovy

以下代码:

def a = [4,10,6].iterator().sort();
println a[1];
println a[1];
Run Code Online (Sandbox Code Playgroud)

产生以下输出:

6
null
Run Code Online (Sandbox Code Playgroud)

奇怪的是它似乎a[1]正在改变名单.这记录在哪里?

Grz*_*Żur 6

它应该是

def a = [4,10,6].sort();
println a[1];
println a[1];
Run Code Online (Sandbox Code Playgroud)

没有iterator()!

然后它产生你期望的

6
6
Run Code Online (Sandbox Code Playgroud)

它根本没有变异![...].iterator().sort()类型的结果java.util.ArrayList$ListItr和你使用它的索引1(方法getAt()被调用Iterator)所以你将迭代器移动2个元素,迭代器在最后位置.然后你再次这样做并试图从最后+ 1位置读取项目,所以它正在返回null.

文件Iterator.getAt().