「这是我参与2022首次更文挑战的第3天,活动详情查看:2022首次更文挑战」
在Scala中,所有的值都有类型,包括数值和函数。下图阐述了类型层次结构的一个子集。
Any
Any是所有类型的超类型,也称为顶级类型。它定义了一些通用的方法如equals、hashCode和toString。Any有两个直接子类:AnyVal和AnyRef。
object Learn0001 {
def main(args: Array[String]): Unit = {
val a: Any = 1
val b: Any = 'w'
val c: Any = 1.0
val d: Any = null
val e: Any = None
println(s"$a,$b,$c,$d,$e")
}
}
--------------------------------------------------
输出:(Any 可以接受所有类型的数据)
1,w,1.0,null,None
AnyVal
AnyVal 代表值类型。有 9 个预定义的非空的值类型分别是:Double、Float、Long、Int、Short、Byte、Char、Unit 和 Boolean。
Unit 是不带任何意义的值类型,它仅有一个实例可以像这样声明:()。所有的函数必须有返回,所以说有时候 Unit 也是有用的返回类型。
val a: AnyVal = 1
val b: AnyVal = 's'
val c: AnyVal = 1.0
AnyRef
AnyRef 代表引用类型。
所有非值类型都被定义为引用类型。在 Scala 中,每个用户自定义的类型都是 AnyRef 的子类型。
如果 Scala 被应用在 Java 的运行环境中,AnyRef 相当于 java.lang.Object。
def main(args: Array[String]): Unit = {
class Person {}
def anyRefTypes(): Unit = {
val person: AnyRef = new Person();
println(s"person params memory address is $person")
}
anyRefTypes();
}
______________________________________________________________
输出:
person params memory address is Learn0001$Person$1@3043fe0e
Null
Null 是所有引用类型的子类型(即 AnyRef 的任意子类型)。它有一个单例值由关键字 null 所定义。Null 主要是使得 Scala 满足和其他 JVM 语言的互操作性,但是几乎不应该在 Scala 代码中使用。
def main(args: Array[String]): Unit = {
def NullTypes(): Unit = {
val a: AnyRef = null
val b: Null = null
println(s"the a values is $a and the b value is $b ")
}
NullTypes();
}
Nothing
Nothing是所有类型的子类型,也称为底部类型。没有一个值是 Nothing 类型的。
它的用途之一是给出非正常终止的信号,如抛出异常、程序退出或者一个无限循环 (可以理解为它是一个不对值进行定义的表达式的类型,或者是一个不能正常返回的方法)。