
本文共 3142 字,大约阅读时间需要 10 分钟。
Scala 开发者指南
一、数据类型
1.1 类型支持
Scala 拥有丰富的数据类型,其中 Byte
、Short
、Int
、Long
和 Char
类型统称为整数类型,整数类型加上 Float
和 Double
统称为数值类型。Scala 的数值类型与 Java 的对应类型取值范围一致。
数据类型 | 描述 |
---|---|
Byte | 8 位有符号补码整数,数值范围为 -128 到 127 |
Short | 16 位有符号补码整数,数值范围为 -32768 到 32767 |
Int | 32 位有符号补码整数,数值范围为 -2147483648 到 2147483647 |
Long | 64 位有符号补码整数,数值范围为 -9223372036854775808 到 9223372036854775807 |
Float | 32 位,IEEE 754 标准的单精度浮点数 |
Double | 64 位,IEEE 754 标准的双精度浮点数 |
Char | 16 位无符号 Unicode 字符,区间值为 U+0000 到 U+FFFF |
String | 字符序列 |
Boolean | true 或 false |
Unit | 表示无值,等同于 Java 中的 void ,用于不返回任何结果的方法。 |
Null | 表示 null 或空引用 |
Nothing | Scala 类型系统的最低级别类型,任何其他类型都是其子类型。 |
Any | 所有其他类的超类 |
AnyRef | Scala 中所有引用类的基类 |
1.2 定义变量
Scala 的变量分为两种:val
和 var
。两者的区别如下:
val
:类似于 Java 中的final
变量,一旦初始化后不能被重新赋值。var
:类似于 Java 中的非final
变量,可以在整个声明周期内被重新赋值。
示例:
scala> val a = 1: Int = 1scala> a = 2 # 这会报错,因为 `val` 不能被重新赋值
scala> var b = 1: Int = 1scala> b = 2 # 这会成功,因为 `var` 可以被重新赋值
1.3 类型推断
在大多数情况下,Scala 会自动推断变量的类型。例如:
scala> val c: String = "hello scala"
如果你希望显式声明类型,可以在变量后面指定:
scala> val c: String = "hello scala"
1.4 Scala 解释器
在 Scala 命令行中,如果输入的值没有被赋值给变量,默认会赋值给 resX
(其中 X 是从 0 开始递增的整数),res
是 result
的缩写,可以在后续语句中引用。
示例:
scala> 5res0: Int = 5scala> res0 * 6res1: Int = 30scala> println(res1)30
二、字面量
Scala 和 Java 在字面量方面有许多相似之处,但也有一些差异。
2.1 整数字面量
Scala 支持十进制和十六进制字面量,但不支持八进制字面量和以 0 开头的整数字面量。
示例:
scala> 1.2res0: Double = 1.2scala> 1.2fres1: Float = 1.2scala> 1.4Fres2: Float = 1.4
2.2 字符串字面量
1. 字符字面量
字符字面量由一对单引号和中间的任意 Unicode 字符组成。你可以显式给出原字符,也可以使用字符的 Unicode 码来表示,还可以包含特殊的转义字符。
示例:
scala> '\u0041'res0: Char = Ascala> 'a'res1: Char = ascala> '\n'res2: Char =
2. 字符串字面量
字符串字面量由双引号包起来的字符组成。
示例:
scala> "hello world"res3: String = hello world
3. 原生字符串
Scala 提供了 """ ... """
语法,通过三个双引号来表示原生字符串和多行字符串,原生字符串中的特殊字符不会被转义。
示例:
scala> "hello \tool"res4: String = hello oolscala> """hello \tool"""res5: String = hello \toolscala> """hello | world"""res6: String = helloworld
4. 符号字面量
符号字面量的写法为:'标识符'
,其中 标识符
可以是任何字母或数字的组合。符号字面量会被编译器翻译为 scala.Symbol
的实例。
示例:
scala> val sym = 'ID008'sym: Symbol = 'ID008'scala> sym.nameres12: String = ID008
5. 插值表达式
Scala 支持插值表达式,可以通过 $
符号来实现值的替换。
示例:
scala> val name = "xiaoming"name: String = xiaomingscala> println(s"My name is $name,I'm ${2*9}.")My name is xiaoming,I'm 18.
三、运算符
Scala 和其他语言一样,支持大多数的操作运算符。以下是 Scala 中常用的运算符及其特点:
3.1 运算符即方法
Scala 的面向对象特性使得一切都是对象。在 Scala 中,1 + 2
实际上是调用了 Int
类中名为 +
的方法。因此,可以写成 1.+(2)
。
示例:
scala> 1 + 2res14: Int = 3scala> 1.+(2)res15: Int = 3
3.2 逻辑运算符
Scala 中的逻辑运算符与其他语言类似,支持 &&
、||
、!
、&
、|
等。这些运算符的执行是短路的,除非左边的表达式可以确定结果,否则右边的表达式才会被执行。
3.3 赋值运算符
Scala 中没有 Java 中的 ++
和 --
运算符。如果你需要类似的操作,只能使用 +=
、-=
等赋值运算符。
示例:
scala> var a = 1: Int = 1scala> a += 1a: Int = 2scala> a -= 1a: Int = 1
3.4 运算符优先级
操作符的优先级由高到低依次为:
!=+=-*/%<<>><<=>=<=|&^==!=><>=|=^=<<=>>=: (方法调用)()
例如:
scala> 2 < (2 + 2)res0: Int = 32 scala> 2 < (2 + 2) res1: Int = 32
3.5 对象相等性
在 Scala 中,可以使用 ==
和 !=
来判断两个对象是否相等,这些操作符可以用于所有的对象,包括 null
。
示例:
scala> 1 == 2res2: Boolean = falsescala> List(1, 2, 3) == List(1, 2, 3)res3: Boolean = truescala> 1 == 1.0res4: Boolean = truescala> List(1, 2, 3) == nullres5: Boolean = falsescala> null == nullres6: Boolean = true
发表评论
最新留言
关于作者
