Scala 类型体系

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


相关文章: