Scala 系列(二)—— 基本数据类型和运算符
发布日期:2021-04-30 22:27:53 浏览次数:83 分类:精选文章

本文共 3142 字,大约阅读时间需要 10 分钟。

Scala 开发者指南

一、数据类型

1.1 类型支持

Scala 拥有丰富的数据类型,其中 ByteShortIntLongChar 类型统称为整数类型,整数类型加上 FloatDouble 统称为数值类型。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 truefalse
Unit 表示无值,等同于 Java 中的 void,用于不返回任何结果的方法。
Null 表示 null 或空引用
Nothing Scala 类型系统的最低级别类型,任何其他类型都是其子类型。
Any 所有其他类的超类
AnyRef Scala 中所有引用类的基类

1.2 定义变量

Scala 的变量分为两种:valvar。两者的区别如下:

  • val:类似于 Java 中的 final 变量,一旦初始化后不能被重新赋值。
  • var:类似于 Java 中的非 final 变量,可以在整个声明周期内被重新赋值。

示例:

scala> val a = 1: Int = 1
scala> a = 2 # 这会报错,因为 `val` 不能被重新赋值
scala> var b = 1: Int = 1
scala> 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 开始递增的整数),resresult 的缩写,可以在后续语句中引用。

示例:

scala> 5
res0: Int = 5
scala> res0 * 6
res1: Int = 30
scala> println(res1)
30

二、字面量

Scala 和 Java 在字面量方面有许多相似之处,但也有一些差异。

2.1 整数字面量

Scala 支持十进制和十六进制字面量,但不支持八进制字面量和以 0 开头的整数字面量。

示例:

scala> 1.2
res0: Double = 1.2
scala> 1.2f
res1: Float = 1.2
scala> 1.4F
res2: Float = 1.4

2.2 字符串字面量

1. 字符字面量

字符字面量由一对单引号和中间的任意 Unicode 字符组成。你可以显式给出原字符,也可以使用字符的 Unicode 码来表示,还可以包含特殊的转义字符。

示例:

scala> '\u0041'
res0: Char = A
scala> 'a'
res1: Char = a
scala> '\n'
res2: Char =

2. 字符串字面量

字符串字面量由双引号包起来的字符组成。

示例:

scala> "hello world"
res3: String = hello world

3. 原生字符串

Scala 提供了 """ ... """ 语法,通过三个双引号来表示原生字符串和多行字符串,原生字符串中的特殊字符不会被转义。

示例:

scala> "hello \tool"
res4: String = hello ool
scala> """hello \tool"""
res5: String = hello \tool
scala> """hello | world"""
res6: String = helloworld

4. 符号字面量

符号字面量的写法为:'标识符',其中 标识符 可以是任何字母或数字的组合。符号字面量会被编译器翻译为 scala.Symbol 的实例。

示例:

scala> val sym = 'ID008'
sym: Symbol = 'ID008'
scala> sym.name
res12: String = ID008

5. 插值表达式

Scala 支持插值表达式,可以通过 $ 符号来实现值的替换。

示例:

scala> val name = "xiaoming"
name: String = xiaoming
scala> 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 + 2
res14: Int = 3
scala> 1.+(2)
res15: Int = 3

3.2 逻辑运算符

Scala 中的逻辑运算符与其他语言类似,支持 &&||!&| 等。这些运算符的执行是短路的,除非左边的表达式可以确定结果,否则右边的表达式才会被执行。

3.3 赋值运算符

Scala 中没有 Java 中的 ++-- 运算符。如果你需要类似的操作,只能使用 +=-= 等赋值运算符。

示例:

scala> var a = 1: Int = 1
scala> a += 1
a: Int = 2
scala> a -= 1
a: Int = 1

3.4 运算符优先级

操作符的优先级由高到低依次为:

!
=
+=
-
*
/
%
<<
>>
<<=
>=
<=
|
&
^
==
!=
>
<
>
=
|
=
^=
<<=
>>=
: (方法调用)
()

例如:

scala> 2 < (2 + 2)
res0: Int = 32
scala> 2 < (2 + 2)
res1: Int = 32

3.5 对象相等性

在 Scala 中,可以使用 ==!= 来判断两个对象是否相等,这些操作符可以用于所有的对象,包括 null

示例:

scala> 1 == 2
res2: Boolean = false
scala> List(1, 2, 3) == List(1, 2, 3)
res3: Boolean = true
scala> 1 == 1.0
res4: Boolean = true
scala> List(1, 2, 3) == null
res5: Boolean = false
scala> null == null
res6: Boolean = true
上一篇:类的类装饰器简单实现思路及案例
下一篇:【GO】复合类型:切片

发表评论

最新留言

逛到本站,mark一下
[***.202.152.39]2025年05月06日 19时10分56秒