Scala 基础 - 语法特性 (一):类型和变量
统一类型
在数据类型方面 Scala 与 Java 的最大区别在于:Scala 没有所谓的基本数据类型,秉承一切皆对象的彻底性,所有的数据类型和函数都是以对象的形式存在。 Scala 类型层次结构:
Any 是所有类型的超类,也称顶级类型,它定义了一些通用的方法如 equals、hashCode 和 toString,Any 有两个之间的子类 AnyValue 和 AnyRef。
AnyVal 代表值类型,它有 9 个预定义的非空的值类型,分别是 Double、Float、Long、Int、Short、Byte、Char、Unit 和 Boolean。Unit 是不带任何意义的类型,Unit 可以作为返回类型。
AnyRef 代表引用类型,所有非值类型都被定义为引用类型,用户声明的自定义类型都属于 AnyRef 引用类型的子类型,同时在 Java 运行环境中调用 Scala。AnyRef 会被当做 java.lang.Object 基类。
Nothing 是所有类型的子类型,包括值类型和引用类型,同时 Nothing 也是 Null 的子类型,也称为底部类型。没有一个值是 Nothing 类型的。Nothing 类型通常用于程序非正常结束的信号,可以被理解为不定义值的表达类型,在非正常返回时使用。这点与 Java 中返回 Null,C++中用-1 作为返回符类似。
Null 是所有引用类型的子类型(即 AnyRef 的任意子类型),它有一个单例值由关键字 Null 所定义。Null 主要是使得 Scala 满足和其他 JVM 语言的互操作性,但是 null 是非常容易引发程序崩溃,同时 Scala 也采用了各种机制来避免使用 Null 类型。
下面实现将各种类型的数据存放在 List 中,并进行遍历打印:
变量
Scala 的变量声明和 Java 有很大区别,Scala 变量可分为
变量,指的是在程序运行过程中值可能会改变的量,用关键词
var
声明。常量,指的是程序运行中值不会发生改变的量,使用关键词
val
声明常量,如果对常量修改在编译时会报错。
Scala 支持语法糖,可以像 Python 一样省略变量类型,编译器自动根据变量和常量的初始值推测类型。
参考资料
书籍《Spark Streaming 实时流式大数据处理实战》
版权声明: 本文为 InfoQ 作者【正向成长】的原创文章。
原文链接:【http://xie.infoq.cn/article/681da2c59a34bfa476c804ca1】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论