Scala 数据类型

Scala 支持的主要数据类型包括基本类型、集合类型、和特殊类型。

下表列出了 Scala 支持的数据类型:

类型类别数据类型描述Scala标准库中的实际类
基本类型Byte8位有符号整数,数值范围为 -128 到 127scala.Byte
基本类型Short16位有符号整数,数值范围为 -32768 到 32767scala.Short
基本类型Int32位有符号整数,数值范围为 -2147483648 到 2147483647scala.Int
基本类型Long64位有符号整数,数值范围为 -9223372036854775808 到 9223372036854775807scala.Long
基本类型Float32位IEEE 754单精度浮点数scala.Float
基本类型Double64位IEEE 754双精度浮点数scala.Double
基本类型Char16位无符号Unicode字符,数值范围为 U+0000 到 U+FFFFscala.Char
基本类型String字符串类型,表示字符序列java.lang.String
基本类型Boolean布尔类型,值为 truefalsescala.Boolean
集合类型List不可变链表scala.collection.immutable.List
集合类型Set不可变集合scala.collection.immutable.Set
集合类型Map不可变键值对集合scala.collection.immutable.Map
集合类型Array可变数组scala.Array
集合类型Tuple可包含不同类型元素的不可变容器scala.TupleN
集合类型Option代表有可能含有值或为空的容器scala.Option
集合类型Either表示两种可能的值类型之一scala.util.Either
集合类型Try处理操作结果可能成功或失败的容器scala.util.Try
特殊类型Unit表示无值,相当于Java中的 voidscala.Unit
特殊类型Null单例对象,表示所有引用类型的空值scala.Null
特殊类型Nothing表示无返回值类型,是所有类型的子类型scala.Nothing
特殊类型Any所有类型的超类型scala.Any
特殊类型AnyRef所有引用类型的超类型,等价于Java中的 Objectscala.AnyRef

在 Scala 中,所有数据类型都是对象。

Scala 没有像 Java 中的原生类型(primitive types)那样的概念。尽管 Scala 的基本数据类型(如 Int、Double 等)在语法上看起来类似于 Java 的原生类型,但它们实际上是对象。这意味着你可以在这些类型上调用方法。

例如,Int 类型在 Scala 中实际上是 scala.Int 类的一个实例,而 scala.Int 是一个最终类,继承自 AnyVal。AnyVal 是 Scala 中的一个特殊类,表示值类型。

下面是一个完整的 Scala 程序,展示了各种数据类型的使用:

DataTypeExamples.scala 文件代码:

object DataTypeExamples {
  def main(args: Array[String]): Unit = {
    // 基本类型
    val byteValue: Byte = 127
    val shortValue: Short = 32767
    val intValue: Int = 2147483647
    val longValue: Long = 9223372036854775807L
    val floatValue: Float = 3.14f
    val doubleValue: Double = 3.141592653589793
    val charValue: Char = 'A'
    val stringValue: String = "Hello, Scala!"
    val booleanValue: Boolean = true

    // 集合类型
    val listValue: List[Int] = List(1, 2, 3)
    val setValue: Set[String] = Set("Scala", "Java", "Python")
    val mapValue: Map[String, Int] = Map("one" -> 1, "two" -> 2, "three" -> 3)
    val arrayValue: Array[Int] = Array(4, 5, 6)
    val tupleValue: (Int, String, Boolean) = (42, "Answer", true)
    val optionValue: Option[String] = Some("I am here")
    val eitherValue: Either[String, Int] = Right(42)
    val tryValue: Try[Int] = Try(10 / 2)

    // 特殊类型
    val unitValue: Unit = ()
    val nullValue: String = null
    val nothingValue: Nothing = throw new RuntimeException("Nothing value")

    // 输出所有值
    println(s"Byte Value: $byteValue")
    println(s"Short Value: $shortValue")
    println(s"Int Value: $intValue")
    println(s"Long Value: $longValue")
    println(s"Float Value: $floatValue")
    println(s"Double Value: $doubleValue")
    println(s"Char Value: $charValue")
    println(s"String Value: $stringValue")
    println(s"Boolean Value: $booleanValue")
   
    println(s"List Value: $listValue")
    println(s"Set Value: $setValue")
    println(s"Map Value: $mapValue")
    println(s"Array Value: ${arrayValue.mkString(", ")}")
    println(s"Tuple Value: $tupleValue")
    println(s"Option Value: $optionValue")
    println(s"Either Value: $eitherValue")
    println(s"Try Value: $tryValue")
   
    println(s"Unit Value: $unitValue")
    println(s"Null Value: $nullValue")
   
    // nothingValue is not printed because it throws an exception
  }
}

使用 scalac 编译器进行编译,使用 scala 命令运行:

scalac DataTypeExamples.scala
scala DataTypeExamples

输出结果:

Byte Value: 127
Short Value: 32767
Int Value: 2147483647
Long Value: 9223372036854775807
Float Value: 3.14
Double Value: 3.141592653589793
Char Value: A
String Value: Hello, Scala!
Boolean Value: true
List Value: List(1, 2, 3)
Set Value: Set(Scala, Java, Python)
Map Value: Map(one -> 1, two -> 2, three -> 3)
Array Value: 4, 5, 6
Tuple Value: (42,Answer,true)
Option Value: Some(I am here)
Either Value: Right(42)
Try Value: Success(5)
Unit Value: ()
Null Value: null