Scala的变量声明和数据类型详解

深碍√TFBOYSˉ_ 2023-05-21 07:15 154阅读 0赞

变量声明

在声明变量时,Scala 允许你决定该变量是不可变(只读)的,还是可变的(读写)。如下所示,不可变的“变量”用 val 关键字声明:
val array: Array[String] = new Array(5)

Scala 的大部分变量事实上是指向堆内存对象的引用,这一点与 Java 一致。所以,以上代码中的 array 也是一个引用,它不能指向其他 Array,但所指向的 Array 中的元素是可变的,如下所示:
在这里插入图片描述
一个 val 变量在声明时必须被初始化。
类似地,一个可变变量用关键字 var 来声明。尽管由于该变量是可变变量,声明后可以再次对其赋值,也必须在声明的同时立即初始化:
在这里插入图片描述
在 Java 中, 所谓的原生类型, 即 char、byte、short、int、long、float、double 和boolean,与其他引用类型有着本质的不同。这些类型确实既不是对象,也没有引用,是“原始”值。Scala 尽力使其面向对象特性更加一致,因此这些类型在 Scala 中是包含有方法的对象,就像引用类型一样。然而,Scala 编译时将这些类型尽可能地转为原生类型,使你可以得到原生类型的运行效率.

用 val 和 var 声明变量时必须初始化这一规则,但存在少数例外情况。例如,这两个关键字均可以用在构造函数的参数中,这时候变量是该类的一个属性,因此显然不必在声明时进行初始化。此时如果用 val 声明,该属性是不可变的;如果用 var 声明,则该属性是可变的、
在这里插入图片描述
var 和 val 关键字只标识引用本身是否可以指向另一个不同的对象,它们并未表明其所引用的对象是否可变。

为了减少可变性引起的bug,应该尽可能地使用不可变变量。

数据类型
在这里插入图片描述
其中Any和AnyRef 、AnyVal 、Nothing 之间的关系如下图:
在这里插入图片描述
空值之间的区别
在这里插入图片描述
当给变量定义的时候,不给出类型就是一个Nothing
在这里插入图片描述

发表评论

表情:
评论列表 (有 0 条评论,154人围观)

还没有评论,来说两句吧...

相关阅读