基本数据类型 #
一、类型层次结构 #
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