数据类型介绍

  1. Scala与Java中有相同的数据类型,在Scala中数据类型都是对象,也就是Scala中没有Java的原生类型
  2. Scala数据类型分为两大类AnyVal(值类型)AnyRef(引用类型),注意:不管是AnyVal还是AnyRef都是对象
  3. 相对于Java类型系统,scala要复杂些,也正是这些复杂多变的类型才让面向对编程和函数式编程完美的融合在了一起

数据类型概览

对图片的小结和整理

  • 在Scala中有一个根类型Any,他是所有类的父类
  • Scala中一切皆为对象,分为两大类AnyVal(值类型),AnyRef(引用类型),他们都是Any子类
  • Null类型是Scala特别类型,它只有一个值null,它是一个bottom.class是所有AnyRef类型的之类
  • Nothin类型也是Bottom.class,它是所有类的子类,开发中通常可以将Nothing类型的值返回给任意变量或者函数,这里抛出异常返回很多
  • nothing比如我们有一个方法,就会异常中断,这时就可以返回nothing,即当我们使用nothing作为返回值,就是明确说明该方法没有明确的返回值

Boolean类型

在 Scala中Boolean只允许取值 true 和 false

Boolean类型占一个字节

Boolean类型适于逻辑运算,一般用于程序流程控制

Unit、Null、Nothing类型

使用细节和注意事项

  • Null类只有一个实例对象,Null,类似于Java中Null引用。Null可以赋值给任意引用类型(AnyRef)但不能复制给值类型(AnyVal基本数据类型)
  • Union类型用来标识过程,也就是没有明确返回值的函数,由此可见Unit类似于Java中的void,Unit中只有一个实例,这个实例也没有实质的意义
  • Nothing可以作为没有正常返回值的返回类型,非常直观的告诉你这个方法不会正常返回,而且由于Noting是其它任意类型的子类,他还能跟要求返回值的方法兼容

值类型转换

值类型隐式转换

当Scala程序正在进行复制或者运算时,精度小的数据类型自动转换为精度大的数据类型,这个就是自动类型转换

数据类型按精度容量大小排序为:

自动类型转换细节说明:

  1. 有多种数据类型的数据混合运算时,系统首先将所有的数据转换成容量最大的那种数据类型,然后再进行计算。例如 5.6+5 =10.6 》double
  2. 当我们把精度(容量)大的数据类型赋值给精度(容量)小的数据类型时,就会报错,反之,就会进行自动类型转换
  3. byte,short 和char之间不会相互自动转换
  4. byte short char他们三者可以计算,在计算时首先转换为Int类型,自动提升原则:表达式结果的类型自动提升为操作数中最大的类型

高级隐式转换和隐式函数

Scala还提供了非常强大的隐式转换机制(隐式函数,隐式类等等),我们放在高级部门专门用一个章节来讲解

强制类型转换

自动类型转换的逆过程,将容量大的数据类型转换为容量小的数据类型。使用时要加上强制转函数,但可能出现精度降低或溢出,格外要注意

1
2
3
4
5
示例:
var num: Int = 10 * 3.5.toInt + 6 * 1.5.toInt
var num2: Int = (10 * 3.5 + 6 * 1.5).toInt
println(num)
println(num2)

值类型和String类型的转换

在开发中,我们经常需要将基本数据类型转成String类型或者将String类型转成基本数据类型

在我们将String类型转成基本数据类型的时候,要确保String类型能够转成有效的数据,比如我们可以把“123”,转成一个整数,但不能把Hello转成一个整数,因为在Scala中,不是讲小数点后的数据进行截取,而是会抛出异常

1
2
3
4
5
//    基本类型转String类型
// 语法将基本类型的值+""即可
var num3: Int = 10
var str = num3 + ""
println(str.isInstanceOf[String])