- Scala编程实战(原书第2版)
- (美)阿尔文·亚历山大
- 567字
- 2024-04-15 12:05:21
第3章 数值和日期
本章涵盖了Scala中的数值类型,以及Java 8引入的日期和时间API的使用方法。
在Scala中,Byte、Short、Int、Long和Char类型被称为整数类型,因为它们由整数或数字表示。整数类型以及Double和Float组成了Scala中的数值类型。与被称为“非数值类型”的Unit和Boolean一样,这些数值类型都继承AnyVal特质(trait)。在Scala页面(https://oreil.ly/C7Id7)关于统一类型的讨论中,这9种类型都被称为预定义值类型,并且不能为空。
预定义值类型与AnyVal和Any(以及Nothing)的关系如图3-1所示,其中:
图3-1:所有预定义的数值类型都继承自AnyVal
·所有的数值类型都继承自AnyVal。
·Scala类层次结构中的所有其他类型都继承自AnyRef。
如表3-1所示,Scala的数值类型与Java中对应的基本类型有着相同的数值范围。
表3-1:Scala中数值类型的数值范围
除此之外,Boolean可以为true或者false。
如果你想知道数据范围的精确值,但手头没有这本书,可以在Scala REPL中查看:
除了这些基本的数值类型之外,BigInt和BigDecimal在本章后续部分都会讲到。
数值常量中的下划线
Scala 2.13中引入了在数值常量中使用下划线的功能:
带下划线的数值常量可以在任何常用的地方使用:
目前有一个地方不能使用带下划线的数值常量,就是当把String转换为数值类型时:
复数
除了Scala自带的math类库,如果你需要其他更强大的数学运算能力,可以了解一下Spire项目(https://typelevel.org/spire),它包含了Rational、Complex和Real等更多的数学概念。
日期和时间
本章最后几节将介绍Java 8引入的日期和时间API,并展示如何使用LocalDate、LocalTime、LocalDateTime、Instant和ZonedDateTime等新类。