Scala极简教程之Scala 数据类型(UNIFIED TYPES)

在Scala中,所有的值都有一个类型,包括数值和函数。下图说明了类型层次结构的一个子集。

Scala 类型层次结构简图Scala类型层次

Any 类型是所有类型的父类型(supertype),也可以称为最顶层类型。Any定义了一些常用方法如:equals,,hashCode以及toString(有点类似于Java中的object)。Any 有两个之间的子类行,分别为:AnyVal 和AnyRef。

AnyVal 表示值类型(value types)。Scala中包含9种预先定义的值类型,分别为: Double, Float,Long,Int,Short,Byte,Char,Unit以及Boolean,这九种基本类型都不可以为空(null)。 Unit是一种不携带任何有意义信息的值类型。括号()是Unit类型的一个显示的实例。在Scala中所有的函数都需要有返回,所以如果你真的什么都不想返回,如Java中void,Unit就成为了一种有用的返回类型。

AnyRef 表示引用类型(reference types)。所有的非值类型都被定义为引用类型。在Scala中,每一个用户自定义的类型都是AnyRef的一个子类型。如果Scala在一个Java运行环境中使用,AnyRef 对应Java中的java.lang.Object。

下面的例子示范了一个包含strings, integers, characters, boolean 值以及函数的列表,这些类型都是对象(object)。

上面的例子定义了一个List[Any],这个列表被多个类型的元素初始化,但是每一种类型都是scala.Any的实例,所以他们可以被添加到列表内。程序输出如下:

a string

732

c

true

类型强转Type Casting

Scala按照下图的方式进行类型强转

举例如下

类型转换时单向的,Long可以转换为Float,但将一个Float类型的值转化为Long类型是编译不过的,如下

引用类型之间的转换也是一样的,稍后深入Nothing and Null

Nothing 是所有类型的子类型,也叫做末层类型。没有值会是Nothing类型的。一个普遍的用法是使用Nothing表示一个非终结(non-termination)态,比如抛出异常,程序退出,或者无限循环(Nothing是一种没有对任何值进行计算的表达式类型,或者是一种没有正常返回的方法)。

Null是所有引用类型的子类型。Scala中使用null关键字来表示。Null在Scala中用来提高自身与其他的JVM语言 的互操作性,null不应该在Scala代码中被使用。 会在后面的文章中讨论Null的替代方案。

发表评论
留言与评论(共有 0 条评论)
   
验证码:

相关文章

推荐文章

'); })();