在Scala中,一切都是对象,即使是一个整数也是对象:
- scala> 1
- res0: Int = 1 scala> "Hello" res1: java.lang.String = Hello
Int
实际上是scala
包(package
)中的类别,Scala
会自动import
该包下的类别,Byte
、Short
、Int
、Long
、Char
、Float
、Double
、Boolean
等都位于scala
包中,在JVM
上运行时,它们对应于Java
中的byte
、short
、int
、long
、char
、float
、double
、boolean
等基本型态(Primitivetype
),有着与Java
中基本资料型态相同的范围。Scala
也重用一些Java
中的类别,例如字串,在上面的示范中可以看到,Scala
直接重用了java.lang.String
类别(Scala
也会自动import
包java.lang
)。
如果你在程式中直接写一个整数,则默认的是十进位的Int
整数,你可以用0
开头表示这是个八进位整数,用0x
开头表示这是个十六进位整数,以L
或l
结尾时,表示这会是个Long
整数:
- scala> 010
- res2: Int = 8
如果你直接撰写一个浮点数,则默认会是个Double
,加上F
或f
可以指定其为Float
,你也可以使用特学记号来表示浮点数:
- scala> 3.14
- res5: Double = 3.14
- scala> 3.14F
字符是以单引号包裹住,也可以指定Unicode
编码:
- scala> 'A'
- res9: Char = A
- scala> '\u0041'
以\作开头为转义字符,如以上指定Unicode编码是其中一例,你还可以有以下的字符来转义:
\\
|
反斜线
|
\'
|
单引号 '
|
\"
|
双引号"
|
\uxxxx
|
以16 进位数指定Unicode字元输出
|
\b
|
倒退一个字元
|
\f
|
换页
|
\n
|
换行
|
\r
|
光标移至行首
|
\t
|
跳格(一个Tab键)
|
在Scala中,若要取得整数、浮点数等的数值范围,则可以使用scala.Math(这是一个object定义)中所定义的值(在Java中则是定义在各自的包裹对象上,如Integer、Double等),例如:
- println("Int: " + Math.MIN_INT + " ~ " + Math.MAX_INT)
- println("Long: " + Math.MIN_LONG + " ~ " + Math.MAX_LONG)
- println("Float: " + Math.MIN_FLOAT + " ~ " + Math.MAX_FLOAT)
- println("Double: " + Math.MIN_DOUBLE + " ~ " + Math.MAX_DOUBLE)
这个程式会显示以下结果:
- Int: -2147483648 ~ 2147483647
- Long: -9223372036854775808 ~ 9223372036854775807
- Float: -3.4028235E38 ~ 3.4028235E38
- Double: -1.7976931348623157E308 ~ 1.7976931348623157E308
在Scala中,如整数、浮点数等基本类型,可以直接作一些操作,例如:
- scala> -13 abs
- res5: Int = 13
- scala> 1 max 2
- res6: Int = 2
- scala> 3.14 round
- res7: Long = 3
- scala>
事实上,abs
、max
、round
等都是对象上的方法(在Scala
中,方法如果不带参数或只带一个参数,则括号可以省略),但并非Int
、Double
上的方法,在Scala
中,如果发现某个方法不属于某对象,则会尝试看看是否有定义的隐式转换(Implicitconversion
),在这边的例子中,由于Scala
为这些基本数据类型定义了一些富包裹器(RichWrapper
),当必要时,会尝试将数值以富包裹器包裹,看看是否可以执行所指定的方法,例如abs
、max
其实是scala.runtime.RichInt
上的方法,round
其实是scala.runtime.RichDouble
上的方法。下表列出了基本型态与富包裹器的对应:
scala.Byte
|
scala.runtime.RichByte
|
scala.Char
|
scala.runtime.RichChar
|
scala.Int
|
scala.runtime.RichInt
|
scala.Long
|
scala.runtime.RichLong
|
scala.Float
|
scala.runtime.RichFloat
|
scala.Double
|
scala.runtime.RichDouble
|
scala.Boolean
|
scala.runtime.RichBoolean
|
java.lang.String
|
scala.runtime.RichString
|