基本数据类型 #

一、类型层次结构 #

1.1 Scala 类型层次 #

text
        Any
       /    \
    AnyVal  AnyRef
    /  |  \      \
  Int Double Boolean String ...
    \   |   /      /
       Nothing
         |
       Null

1.2 Any 类型 #

Any 是所有类型的超类:

scala
val any: Any = 42
val anyRef: Any = "Hello"

1.3 AnyVal 与 AnyRef #

  • AnyVal:值类型的父类(Int, Double, Boolean, Char 等)
  • AnyRef:引用类型的父类(String, List, 自定义类等)
scala
val value: AnyVal = 42
val reference: AnyRef = "Hello"

二、整数类型 #

2.1 类型范围 #

类型 位数 最小值 最大值
Byte 8 -128 127
Short 16 -32768 32767
Int 32 -2^31 2^31-1
Long 64 -2^63 2^63-1

2.2 整数字面量 #

scala
val byteVal: Byte = 127
val shortVal: Short = 32767
val intVal = 2147483647
val longVal = 9223372036854775807L

val hex = 0xFF
val binary = 0b1010

2.3 整数运算 #

scala
val a = 10
val b = 3

val sum = a + b
val diff = a - b
val product = a * b
val quotient = a / b
val remainder = a % b

val negated = -a
val positive = +a

2.4 位运算 #

scala
val x = 0x0F
val y = 0xF0

val and = x & y
val or = x | y
val xor = x ^ y
val not = ~x
val leftShift = x << 2
val rightShift = x >> 2
val unsignedRightShift = x >>> 2

2.5 整数方法 #

scala
val num = 42

num.abs
num.max(100)
num.min(10)
num.toBinaryString
num.toHexString
num.toOctalString
num.until(50)
num.to(50)

三、浮点类型 #

3.1 Float 和 Double #

类型 位数 精度
Float 32 6-7 位有效数字
Double 64 15-16 位有效数字

3.2 浮点字面量 #

scala
val floatVal = 3.14f
val doubleVal = 3.141592653589793
val scientific = 1.5e10
val scientificFloat = 1.5e10f

3.3 浮点运算 #

scala
val a = 3.14
val b = 2.0

val sum = a + b
val diff = a - b
val product = a * b
val quotient = a / b

val floor = a.floor
val ceil = a.ceil
val rounded = a.round

3.4 特殊值 #

scala
val posInf = Double.PositiveInfinity
val negInf = Double.NegativeInfinity
val nan = Double.NaN

println(1.0 / 0.0)
println(0.0 / 0.0)
println(Double.NaN == Double.NaN)

3.5 浮点方法 #

scala
val pi = 3.14159

pi.abs
pi.round
pi.floor
pi.ceil
pi.toInt
pi.toFloat
pi.compare(3.14)

四、布尔类型 #

4.1 布尔值 #

scala
val yes = true
val no = false

4.2 布尔运算 #

scala
val a = true
val b = false

val and = a && b
val or = a || b
val not = !a
val xor = a ^ b

4.3 短路求值 #

scala
def expensiveOperation(): Boolean =
  println("Computing...")
  true

val result1 = false && expensiveOperation()
val result2 = true || expensiveOperation()

4.4 布尔方法 #

scala
val flag = true

flag.&&(true)
flag.||(false)
flag.unary_!
flag.compare(false)

五、字符类型 #

5.1 字符字面量 #

scala
val charA = 'A'
val charNum = '1'
val charSymbol = '@'

5.2 转义字符 #

scala
val newline = '\n'
val tab = '\t'
val backslash = '\\'
val quote = '\''
val doubleQuote = '\"'

5.3 Unicode 字符 #

scala
val unicodeA = '\u0041'
val unicodeChinese = '\u4e2d'

5.4 字符方法 #

scala
val ch = 'A'

ch.isUpper
ch.isLower
ch.isDigit
ch.isLetter
ch.isWhitespace
ch.toLower
ch.toUpper
ch.toInt

六、字符串类型 #

6.1 字符串字面量 #

scala
val greeting = "Hello, Scala!"
val empty = ""
val multiline = """This is a
multiline string"""

6.2 字符串插值 #

scala
val name = "Scala"
val version = 3

val s1 = s"Hello, $name!"
val s2 = s"Version: $version"
val s3 = s"2 + 2 = ${2 + 2}"

6.3 原始字符串 #

scala
val raw = raw"Hello\nWorld"

6.4 格式化字符串 #

scala
val price = 99.99
val quantity = 10

val formatted = f"Price: $$${price}%.2f, Quantity: $quantity%d"

6.5 常用字符串方法 #

scala
val str = "Hello, Scala!"

str.length
str.charAt(0)
str.substring(0, 5)
str.toLowerCase
str.toUpperCase
str.trim
str.split(", ")
str.replace("Scala", "World")
str.contains("Scala")
str.startsWith("Hello")
str.endsWith("!")
str.indexOf("Scala")
str.reverse
str.take(5)
str.drop(7)

七、Unit 类型 #

7.1 Unit 概述 #

Unit 类似于 Java 的 void,表示没有有意义的值:

scala
def printHello(): Unit =
  println("Hello!")

val unit: Unit = ()

7.2 Unit 的值 #

Unit 只有一个值:()

scala
val u: Unit = ()
println(u)

八、Null 类型 #

8.1 Null 概述 #

Null 是所有引用类型的子类,只有一个值 null

scala
val nullString: String = null
val nullList: List[Int] = null

8.2 注意事项 #

null 不能赋值给值类型:

scala
val nullInt: Int = null

8.3 避免 null #

推荐使用 Option 代替 null

scala
val maybeValue: Option[String] = Some("value")
val noValue: Option[String] = None

九、Nothing 类型 #

9.1 Nothing 概述 #

Nothing 是所有类型的子类,表示不会有返回值:

scala
def error(message: String): Nothing =
  throw new RuntimeException(message)

def infiniteLoop(): Nothing =
  while true do ()

9.2 Nothing 的用途 #

scala
def divide(a: Int, b: Int): Int =
  if b == 0 then
    throw new ArithmeticException("Division by zero")
  else
    a / b

十、类型转换 #

10.1 自动类型转换 #

scala
val byteVal: Byte = 10
val shortVal: Short = byteVal
val intVal: Int = shortVal
val longVal: Long = intVal
val floatVal: Float = longVal
val doubleVal: Double = floatVal

10.2 强制类型转换 #

scala
val doubleVal = 3.14159
val intVal = doubleVal.toInt
val longVal = doubleVal.toLong
val floatVal = doubleVal.toFloat

val longNum = 100L
val intNum = longNum.toInt
val shortNum = longNum.toShort
val byteNum = longNum.toByte

10.3 字符串与数值转换 #

scala
val intStr = "123"
val num = intStr.toInt
val longNum = intStr.toLong
val doubleNum = "3.14".toDouble

val str = 123.toString
val str2 = 3.14.toString

十一、类型检查与转换 #

11.1 类型检查 #

scala
val x: Any = 42

x.isInstanceOf[Int]
x.isInstanceOf[String]

11.2 类型转换 #

scala
val x: Any = 42

if x.isInstanceOf[Int] then
  val num = x.asInstanceOf[Int]
  println(s"Number: $num")

11.3 模式匹配(推荐) #

scala
val x: Any = 42

x match
  case i: Int => println(s"Int: $i")
  case s: String => println(s"String: $s")
  case _ => println("Unknown type")

十二、总结 #

类型层次 #

text
Any
├── AnyVal
│   ├── Int, Long, Short, Byte
│   ├── Float, Double
│   ├── Boolean
│   ├── Char
│   └── Unit
└── AnyRef
    ├── String
    ├── List, Map, Set
    └── 自定义类

类型选择建议 #

场景 推荐类型
整数 Int(默认)、Long(大数)
小数 Double(默认)、Float(节省内存)
布尔 Boolean
字符 Char
文本 String
无返回值 Unit
可能为空 Option[T]

下一步,让我们学习 类型转换

最后更新:2026-03-27