Scala 数据类型
Scala 支持的主要数据类型包括基本类型、集合类型、和特殊类型。
下表列出了 Scala 支持的数据类型:
类型类别 数据类型 描述 Scala标准库中的实际类
基本类型 Byte 8位有符号整数,数值范围为 -128 到 127 scala.Byte
基本类型 Short 16位有符号整数,数值范围为 -32768 到 32767 scala.Short
基本类型 Int 32位有符号整数,数值范围为 -2147483648 到 2147483647 scala.Int
基本类型 Long 64位有符号整数,数值范围为 -9223372036854775808 到 9223372036854775807 scala.Long
基本类型 Float 32位IEEE 754单精度浮点数 scala.Float
基本类型 Double 64位IEEE 754双精度浮点数 scala.Double
基本类型 Char 16位无符号Unicode字符,数值范围为 U+0000 到 U+FFFF scala.Char
基本类型 String 字符串类型,表示字符序列 java.lang.String
基本类型 Boolean 布尔类型,值为 true 或 false scala.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中的 void scala.Unit
特殊类型 Null 单例对象,表示所有引用类型的空值 scala.Null
特殊类型 Nothing 表示无返回值类型,是所有类型的子类型 scala.Nothing
特殊类型 Any 所有类型的超类型 scala.Any
特殊类型 AnyRef 所有引用类型的超类型,等价于Java中的 Object scala.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