主页 > 新闻资讯 > 大数据培训:Scala中的可变(var)与不可变(val)

大数据培训:Scala中的可变(var)与不可变(val)

作者:张老师 浏览次数: 2021-01-18 17:09
大数据学习当中,Scala语言尤其在Spark和Kafka的学习当中起到很好的支持作用,这两个组件的原生编程语言,就是选择的Scala。之前我们也对Scala编程思想做过介绍(大数据开发:Scala函数式编程思想),今天的大数据培训分享,主要来讲讲Scala当中的可变(var)和不可变(val)。

大数据培训:Scala中的可变(var)与不可变(val)

Scala中定义变量分为var(可变变量)和val(不可变变量)

Scala中集合框架也分为可变集合和不可变集合。比如List(列表)和Tuple(元组)本身就是不可变的,set和map分为可变和不可变的,默认为不可变。

var与val的理解

大数据培训:Scala中的可变(var)与不可变(val)

例子如下:

var list=List(“Hello”,“World”);

list+=“Scala”;

很多童靴看到以上这段代码,可能比较费解。var定义的变量是可变的,List集合本身又是不可变的,怎么能一起使用呢?而且List为啥还能添加元素呢?

首先,我们来理解List为不可变的为何还能添加元素?

原本的List是不可变的,这并没有错,但在执行添加“Scala”元素时,其实并不是在原本的List对象中添加,而是新建一个List包含了Hello,World,Scala。这就好比Java

中的String类型是固定长度的,每次向String对象追加字符串都会创建一个新的String对象。

接着,我们来理解var是可变的,List不可变,为何能一起使用?

这当然没有问题,我们定义变量所使用的是var和val是对象的地址引用,并不是对象本身,和对象可不可变并没有任何关系。

var list表示变量list指向的对象是List(“Hello”,“World”),而我们可以修改变量list指向的对象。在执行添加“Scala”元素时会创建一个新List对象,这时list变量就指向这个新对象。

想一想,如果我们定义把var list换成val list还能执行"list+=“Scala”添加元素吗?

答案是不行哈,这时list是常量,是不允许修改的,所以不允许再指向新List对象。

同理,Set和Map也是一样。

总结

var表示定义一个变量,变量所指向的对象是允许修改;

val表示定义一个常量,常量所指向的对象不允许修改;

List、Tuple、Set和Map都是不可变的,与Java的String类似,添加元素等操作会创建新的对象。

对于Scala语言的学习,其实有了之前的Java编程语言基础,很多东西是能够对比起来进行理解的。当然,Scala在大数据开发当中,真正作为编程语言来说,使用不算频繁,更多还是作为Spark等框架源码研读的重要支持。成都加米谷大数据,专业大数据培训机构,大数据开发、数据分析与挖掘,零基础班本月正在招生中,课程大纲及试学视频,联系客服获取!
热点排行
推荐文章
立即申请>>