Scala 中定义变量分为 var(可变变量)和 val(不可变变量)
Scala 中集合框架也分为可变集合和不可变集合。比如 List(列表) 和 Tuple(元组)本身就是不可变的,set 和 map 分为可变和不可变的,默认为不可变。
例子如下:
var list = List(“Hello”,“World”);
list += “Scala”;
很多童靴看到以上这段代码,可能比较费解。var 定义的变量是可变的,List 集合本身又是不可变的,怎么能一起使用呢?而且 List 为啥还能添加元素呢?
原本的 List 是不可变的,这并没有错,但在执行添加 “Scala” 元素时,其实并不是在原本的 List 对象中添加,而是新建一个 List 包含了 Hello,World,Scala。这就好比 Java
中的 String 类型是固定长度的,每次向 String 对象追加字符串都会创建一个新的 String 对象。
这当然没有问题,我们定义变量所使用的是 var 和 val 是对象的地址引用,并不是对象本身,和对象可不可变并没有任何关系。
var list 表示变量 list 指向的对象是 List(“Hello”,“World”),而我们可以修改变量 list 指向的对象。在执行添加 “Scala” 元素时会创建一个新 List 对象,这是 list 变量就指向这个新对象。
想一想,如果我们定义把 var list 换成 val list 还能执行 "list += “Scala” 添加元素吗?
答案是不行哈,这时 list 是常量,是不允许修改的,所以不允许再指向新 List 对象。
同理,Set 和 Map也是一样。
原文:https://www.cnblogs.com/binbingg/p/14133992.html