public updateList(lst) {
lst += "a"
}
List lst = []
updateList(lst)
println(lst)
这会打印一个空列表。然而;
public updateList(lst) {
lst.add("a")
}
List lst = []
updateList(lst)
println(lst)
,将根据需要打印“a”。
我总是假设+ =与.add()相同,但显然不是。我假设+ =正在创建一个新的List,而.add()只更新了现有的List?
答案 0 :(得分:7)
第一种方法在plus
变量
lst
我们可以看到from the documentation这将:
创建一个集合作为一个联合 集合和对象。
因此将返回一个新集合,原始lst
(在此方法范围之外)将保持不变。 (显然,在这个方法的范围内,lst将是一个包含一个元素的新列表)
通过打印出updateList
方法的结果可以看出这一点:
public updateList(lst) {
lst += "a" // calls plus, creates a new list, and returns this new list.
// lst (outside the context of this method) is unmodified
}
List lst = []
println( updateList(lst) )
如果您致电add
,则拨打standard java add method。
public updateList(lst) {
lst.add "a"
}
原来的lst
被修改了
add
的替代方法是使用leftShift
运算符:
public updateList(lst) {
lst << "a"
}
在幕后添加哪些调用:(来自Groovy主干源的代码)
public static <T> Collection<T> leftShift(Collection<T> self, T value) {
self.add(value);
return self;
}