Scala 类型层次结构
Scala中没有原始类型(与java不同)。Scala中的所有数据类型都是对象,都有对其数据进行操作的方法。Scala的所有类型都是作为 类型层次结构 的一部分存在的。
我们在Scala中定义的每一个类都会自动属于这个层次结构。
Any 是所有类的超类,也叫顶类。它定义了某些通用的方法,如 equals、hashCode 和 toString。Any有两个直接的子类。
- AnyVal
- AnyRef
例子
// Scala program of Scala Type hierarchy
// Creating object
object Geeks
{
// Main method
def main(args: Array[String])
{
val list: List[Any] = List(
false,
66677,
732,
'a',
"abs"
)
list.foreach(element => println(element))
}
}
输出。
false
66677
732
a
abs
AnyVal 代表价值类。所有的值类都是预定义的;它们对应于类Java语言的原始类型。有九种预定义的值类型,它们都是非空的。Double, Float, Long, Int, Short, Byte, Char, Unit, and Boolean。Scala既有数字类型(如Int和Double),也有非数字类型(如String),可以用来定义值和变量。布尔型变量只能是真或假。字母是用单引号写的。
例子
// Scala program of Scala Type hierarchy
// Using AnyVal.
// Creating Object
object Geeks
{
// Main method
def main(args: Array[String])
{
val list: List[AnyVal] = List(
333, true, false
)
list.foreach(element => println(element))
}
}
输出。
333
true
false
AnyRef 代表引用类。所有非值类型都被定义为引用类型。用户定义的类默认定义了引用类型;也就是说,它们总是(间接地)子类化scala.AnyRef。scala.AnyRef在java编程中对应于java.lang.Object。
例子
// Scala program of Scala Type hierarchy
// Using AnyRef
// Creating object
object Geeks
{
// Main method
def main(args: Array[String])
{
val list: List[AnyRef] = List(
"GFG", "GEEKSFORGEEKS"
)
list.foreach(element => println(element))
}
}
输出。
GFG
GEEKSFORGEEKS
Nothing和Null:
Nothing 是所有价值类型的一个子分类,它也被称为底层类型。Nothing类型 即没有价值。我们可以用Nothing来表示非终止的信号,如抛出的异常、程序退出或无限循环。
Null 是所有引用类型的一个子分类。关键字字面null可以识别一个单一的值。提供Null主要是为了与其他JVM语言的互操作性。