本文来自艾叔编著的《零基础快速入门Scala》免费电子书,添加文末艾叔微信,获取完整版的PDF电子书
第3章 Scala基本数据类型本章介绍Scala的基本数据类型,基本数据类型是Scala语言的基石:Scala中所有的变量都要有一个基本数据类型;所有的函数参数、返回值都会用到基本数据类型;即使是自定义的class/object,到最后,也会落实到基本数据类型。
3.1 基本数据类型Scala中定义了9种基本的数据类型,它们的名字、取值范围和说明如表3-1所示。
表 3-1 Scala基本数据类型及说明
| 序号 | 类型名称 | 字节数 | 取值范围 | 使用说明 |
| 1 | Byte | 1 | -128~127 | 1字节,8位,有符号整型 |
| 2 | Char | 2 | 0~65535 | Unicode字符,2字节,16位无符号 |
| 3 | Short | 2 | -32768~32767 | 2字节,16,有符号整型 |
| 4 | Int | 4 | -2147483648~2147483647 | 4字节,32位,有符号整型 |
| 5 | Long | 8 | -9223372036854775808~ 9223372036854775807 | 8字节,64位,有符号整型 |
| 6 | Float | 4 | -3.4028235E38~3.4028235E38 | 4字节,32位,IEEE754单精度浮点型 |
| 7 | Double | 8 | -1.7976931348623157E308~ 1.7976931348623157E308 | 8字节,64位,IEEE754双精度浮点型 |
| 8 | Boolean | true/false | Boolean类型只有true和false两个值 | |
| 9 | Unit | () | Unit类型只有1个实例,用一个括号()表示 |
& 以上9种基本数据类型,都是class,例如:val num=1为例,num是Int类型,Int是一个class,num则是一个引用,它指向值为1的Int对象(实例),num有自己的方法,例如各种转换方法等,同时数值1也有自己的方法,如getClass,总之,Scala中,一切皆对象;
& Byte是单字节的,可以存放ASCII码
& Scala的Char和Java的Char一样,都是2字节的,存放单个字符,包括英文和中文字符;
& String不是Scala中的基本数据类型,Scala中的String直接使用的是Java中的String类。
3.2 基本操作本节介绍Scala基本数据类型的基本操作,具体如下。
1. 打印类型的范围
例如:打印Byte类型的最小值,具体命令如下。
scala> Byte.MinValue
res24: Byte = -128
打印Byte类型的最大值,具体命令如下。
scala> Byte.MaxValue
res25: Byte = 127
& 有了这两个函数,就不需要记住表3-1中的数值范围了。
2. 打印数据的类型
打印数字1的类型,具体命令如下。
scala> 1.getClass
res26: Class[Int] = int
打印变量的类型,例如打印变量a的类型。
scala> a.getClass
res28: Class[Char] = char
& 在没有IDEA的情况下,如果要确定一个变量的类型,使用getClass方法,是比较好的方法。
3.3 数据类型转换图3-1列出了类型转换的原则:顺着箭头方向,可以自动转换,不需要显式转换,例如Byte类型的数据可以赋值给Short类型变量,反过来(反箭头方向),不能自动转换,需要显式转换,即调用具体的转换函数。
图 3-1 Scala基本数据类型转换图
例如,声明一个Char类型变量c,其值为A。
scala> val c = 'A'
c: Char = A
将c赋值给Int类型变量n,n的值为65,即字符A的ASCII码值,因为是箭头方向,因此,不需要调用c.toInt,可以直接转换。
scala> val n:Int = c
n: Int = 65
反箭头方向,则不能自动转换,如下面的例子就报错了。
scala> val b:Char = n
found : Int
required: Char
val b:Char = n
调用转换函数,显式转换,是可以的。
scala> val b:Char = n.toChar
b: Char = A
加艾叔微信,加入Linux(Shell+Zabbix)、大数据(Spark+Hadoop)、云原生(Docker+Kubernetes)技术交流群
关注艾叔公众号,获取更多一手信息



