Scala 类型体系
1.scala的根类是Any,
- Any是scala所有类的父类,
- Any下面有两个子类:AnyVal、AnyRef
2.AnyVal表示值类型,下面有四个大类:
- Numeric types:数值类型
- Boolean:布尔类型
- Char:字符类型
- Unit:空类型
3.AnyRef是所有引用类型的父型:
- 所有java中的引用类型都是AnyRef的子类。
- 同样,所有我们自定义的scala的类也是AnyRef的子类。
4.上图(scala类型体系)的底部还有两个类:
- Null是所有引用类型最后一个子类
- Nothing是所有scala类型的最后一个子类。既是AnyVal,也是AnyRef的最后一个子类
Scala 数据类型详解
1.Numeric types:byte/short/int/long/float/double
- byte:只有 1 个字节
package com.leili.scala
object Demo2 {
def main(args: Array[String]): Unit = {
val a: Byte=10
println(a)
}
}
- short:2 个字节
package com.leili.scala
object Demo2 {
def main(args: Array[String]): Unit = {
val a: Short=10
println(a)
}
}
- int:4 个字节
- long:8 个字节
- float
package com.leili.scala
object Demo2 {
def main(args: Array[String]): Unit = {
val a: Float=10
println(a)
}
}
输出是带小数点的——
a:Float=50.0
- double
package com.leili.scala
object Demo2 {
def main(args: Array[String]): Unit = {
val a: Double=60.98765
println(a)
}
}
输出是带小数点的——
a:Double=60.98765
⚠️低精度数值类型向高精度数值类型赋值时,不需要类型转换。
⚠️高精度数值类型向低精度数值类型赋值时,会报错——type mismatch。(后面可以做隐式转换)
代码:
package com.leili.scala
object Demo2 {
def main(args: Array[String]): Unit = {
var b: Short = 20
var d: Byte = b
println(d)
}
}
报错
Error:(8, 19) type mismatch;
found : Short
required: Byte
var d: Byte = b
### 2.Boolean:true/false
### 3.Char
⚠️字符类型用单引号
### 4.Unit
- 往往作为函数的返回值出现
- 往往表示函数是有副作用的,因为函数不反悔任何的值
package com.leili.scala
object Demo2 {
def main(args: Array[String]): Unit = {
var d: Unit=()
println(d)
}
}
输出:
()
### 5.Null
- Null 表示引用类型是空
### 6.Nothing
- Nothing 表示程序异常终止。对于一个函数而言,如果其返回值是Nothing,表示它出现了异常。
### 7.String
scala中,构建于java的String之上,新增了字符串插值的特性
package com.leili.scala
object Demo2 {
def main(args: Array[String]): Unit = {
var name = “leili”
println(s"my name is ${name}")
}
}
输出:
my name is leili