object Dcoder extends App {
var c = scala.collection.immutable.Map(12 -> "jd", 13 -> "ff")
c = c ++ Map(16 -> "hh", 17 -> "℅")
println(c)
c ++= Map(18 -> "|||")
println(c)
}
a = a ++ Map()
以及a ++= Map()
执行连接。 a=a++b
和a++=b
的含义是否相同?
答案 0 :(得分:4)
有时它们是相同的,有时它们不是。
如果集合是不可变的(例如List
),那么它没有名为++=
的特殊方法,所以声明
collection ++= someOtherCollection
是语法糖,它被贬低为
collection = collection ++ someOtherCollection
另一方面,大多数可变集合(例如ListBuffer
)都有一个特殊的++=
方法,所以
collection ++= someOtherCollection
通过添加所有元素collection
来原位变异someOtherCollection
。
要确保++=
和= ... ++
的行为方式不同,请考虑以下两个示例:
var x = collection.mutable.ListBuffer(1, 2, 3)
val y = collection.mutable.ListBuffer(4, 5)
val z = x
x ++= y
println(x)
println(z)
打印
ListBuffer(1, 2, 3, 4, 5)
ListBuffer(1, 2, 3, 4, 5)
但是
var x = collection.mutable.ListBuffer(1, 2, 3)
val y = collection.mutable.ListBuffer(4, 5)
val z = x
x = x ++ y
println(x)
println(z)
打印
ListBuffer(1, 2, 3, 4, 5)
ListBuffer(1, 2, 3)
因为++
强制创建一个全新的集合,而z
未引用该集合。
答案 1 :(得分:0)
在整数
的情况下与a = a+2
和a+=2
相同
对于第二个问题,a=a++b
和a++=b
取决于a和b的类型。取决于他们是否支持++和++ =运算符