Scala 与 Java 有着相同的数据类型, Scala中数据类型都是对象
,也就是说 scala 没有 java中的原生类型。
Scala 数据类型分为两大类 AnyVal(值类型)
和 AnyRef(引用类型)
, 注意:不管是 AnyVal 还是 AnyRef 都是对象。
关系图如下:
一、Scala的数据架构
- 在 scala 中有一个
根类型 Any
,他是所有类的父类。 - scala 中一切皆为对象,分为两大类 AnyVal(值类型), AnyRef(引用类型), 他们都是 Any 子类
- Null 类型是 scala 的特别类型,它只有一个值 null, 他是 bottom calss ,是 所有 AnyRef 类型的子类
- Nothing 类型也是 bottom class ,他是所有类的子类,在开发中通常可以将 Nothing 类型的值返回给任意变量或者函数, 这里抛出异常使用很多
- 在 scala 中仍然遵守,低精度的值,向高精度的值自动转换(implicit conversion)
隐式转换
。
二、Scala的数据类型
1、整数类型
(1)scala各整数类型有固定的表数范围和字段长度,不受具体OS的影响,以保证scala程序的可移植性。
(2)scala的整型 常量/字面量,默认为Int型,声明Long型 常量/字面量,须后加’l’或’L’
(3)scala程序中变量常声明为Int型,除非不足以表示大数,才使用Long
var num = 1 //默认是Int,4字节、32位
var num = 2L //数据类型为Long类型,8字节、64位
2、浮点类型
//Scala 的浮点型常量默认为 Double 型,声明 Float 型常量,须后加‘f’或‘F’
val num = 2.6 //Double
val num = 2.6F //Float
3、字符类型
字符类型可以表示单个字符,字符类型是 Char, 16 位无符号 Unicode 字符(2 个字节)。
1.字符常量是用单引号(‘ ’)括起来的单个字符
2.Scala 也允许使用转义字符‘\’来将其后的字符转变为特殊字符型常量
3.可以直接给 Char 赋一个整数,然后输出时,会按照对应的 unicode 字符输出 ['\u0061' 97]
4.Char 类型是可以进行运算的,相当于一个整数,因为它都对应有 Unicode 码
4、布尔类型
布尔类型也叫Boolean类型,Booolean类型数据只允许取值true
和false
,占1个字节,适于逻辑运算
,一般用于程序流程控制。
5、Unit 类型、Null 类型和 Nothing 类型
(1)Null 类只有一个实例对象,null,类似于 Java 中的 null 引用。null 可以赋值给任意引用类型(AnyRef),但是不能赋值给值类型(AnyVal: 比如 Int, Float, Char, Boolean, Long, Double, Byte, Short)
(2)Unit 类型用来标识过程
,也就是没有明确返回值的函数。由此可见,Unit 类似于 Java 里的 void,Unit 只有一个实例。
(3)Nothing,可以作为没有正常返回值的方法的返回类型,非常直观的告诉你这个方法不会正常返回,而且由于 Nothing 是其他任意类型的子类,他还能跟要求返回值的方法兼容。
三、值类型转换
1、值类型隐式转换
(1)在进行赋值或者运算时,精度小的类型自动转换为精度大的数据类型
,这个就是自动类型转换(隐式转换)
(2) (byte, short) 和 char 之间不会相互自动转换
(3)byte,short,char 他们三者可以计算,在计算时首先转换为 int 类型
(4)自动提升原则: 表达式结果的类型自动提升为 操作数中最大的类型
数据类型按精度(容量)大小排序为:
2、强制类型转换
自动类型转换的逆过程,将容量大的数据类型转换为容量小的数据类型
。使用时要加上强制转函数,但可能造成精度降低或溢出,格外要注意。
(1)进行数据的 从 大——>小,就需要使用到强制转换
(2)强转符号只针对于最近的操作数有效,往往会使用小括号提升优先级
(3)Char 类型可以保存 Int 的常量值,但不能保存 Int 的变量值,需要强转
(4)Byte 和 Short 类型在进行运算时,当做 Int 类型处理
val num1: Int = 10 * 3.5.toInt + 6 * 1.5.toInt // 36
val num2: Int = (10 * 3.5 + 6 * 1.5).toInt // 44
val char1 : Char = 1
val num3 = 1
//val char2 : Char = num3 //错
3、值类型和 String 类型的转换
基本类型转 String 类型
语法:将基本类型的值+"" 即可
String 类型转基本数据类型
语法:通过基本类型的 String 的 toXxx 方法即可
注意事项:在将 String 类型转成 基本数据类型时,要确保 String类型能够转成有效的数据,比如 我们可以把 "123" , 转成一个整数,但是不能把 "hello" 转成一个整数
四、标识符的命名规范
1、Scala 中的标识符声明,基本和 Java 是一致的,但是细节上会有所变化。
2、首字符为字母,后续字符任意字母和数字,美元符号,可后接下划线_
3、数字不可以开头。
4、首字符为操作符(比如+ - * / ),后续字符也需跟操作符 ,至少一个(反编译)
5、操作符(比如±*/)不能在标识符中间和最后.
6、用反引号…包括的任意字符串,即使是关键字(39 个)也可以 [true]
hello // ok
hello12 // ok
1hello // error
h-b // error
x h // error
h_4 // ok
_ab // ok
Int // ok, 在 scala 中,Int 不是关键字,而是预定义标识符,可以用,但是不推荐
Float // ok
_ // 不可以,因为在 scala 中,_ 有很多其他的作用,因此不能使用
Abc // ok
+*- // ok
+a // error