数据类型

与Java语言类似,Scala 语言内置了基本的数据(变量)类型以及在这些类型上允许执行的运算符。

但是与Java语言不同的是,Scala没有原始数据类型(基本数据类型)。在Scala中,所有的数据类型都是对象,这些对象具有操作其自身数据的方法。当一个Scala 程序被编译为Java 字节码时,编译器会自动地将Scala 类型转换为Java 的原始数据类型,以尽可能地优化程序性能。

Scala的所有数据类型,从数值到集合,都是类型层次结构的一部分。在Scala中定义的每个类也将自动属于这个层次结构。Scala核心数据类型层次结构如下图所示:

Any、AnyVal和AnyRef

这三者为Scala类型层次结构的根。继承自AnyVal的数据类型称为“值类型”。继承自AnyRef的数据类型称为“引用类型”。

Scala支持的数据类型如下所示:

val donutsBought: Int = 5
val bigNumberOfDonuts: Long = 100000000L
val smallNumberOfDonuts: Short = 1
val priceOfDonut: Double = 2.50
val donutPrice: Float = 2.50f
val donutStoreName: String = "大数据"
val donutByte: Byte = 0xa           // 10
val donutFirstLetter: Char = 'D'
val nothing: Unit = ()              // 可以把Unit类型想象成类似于Java的void关键字

1、值类型介绍如下:

Numeric数据类型用来表示数值,如下表所示:

数据类型 描述 大小 最小值 最大值
Byte 有符号整数 1个字节 -128 127
Short 有符号整数 2个字节 -32768 32767
Int 有符号整数 4个字节 -2147483648 2147483647
Long 有符号整数 8个字节 -9223372036854775808 9223372036854775807
Float 有符号浮点数 4个字节 n/a n/a
Double 有符号浮点数 8个字节 n/a n/a

Scala支持自动将数字从一种类型转换为另一种类型的能力,转换顺序如下:

Byte -> Short -> Int -> Long -> Float -> Double。

请看下面的代码:

如图中所示,Scala Shell支持"paste"模式。当需要输入多行代码一起执行时,可以先键入":paste",进入paste模式,然后输入多行代码。当按下Ctrl + D键时,退出paste模式,并执行代码。

Boolean类型代表逻辑值,可以是true或false。如下所示:

Char类型代表字符,即用单引号括起来的单个字符。如下所示:

Unit类型用于定义不返回数据的函数。它与Java中的void关键字类似。

2、常用的引用类型介绍如下:

String类型表示字符串,即用双引号括起来的零个或多个字符。例如:

字符串类型是我们在数据处理中涉及比较多的类型,关于字符串更详细的用法,在第xxx章将会有更详细的讲解。

3、数据类型转换

Scala编译器也足够聪明,可以将一种数据类型转换为另一种数据类型。但是,应该记住,只要结果类型没有损失精度,这种转换是没问题的。


《PySpark原理深入与编程实战》