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