以下代码:
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]正在改变名单.这记录在哪里?
它应该是
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.