本篇介绍Scala支持的基本数据类型,如果你是个Java程序员,你会发现Java支持的基本数据类型,Scala都有对应的支持,不过Scala的数据类型都是对象(比如整数),这些基本类型都可以通过隐式自动转换的形式支持比Java基本数据类型更多的方法。隐式自动转换的概念将在后面介绍,简单的说就是可以为基本类型提供扩展,比如如果调用(-1).abs() ,Scala发现基本类型Int 没有提供abs()方法,但可以发现系统提供了从Int类型转换为RichInt的隐式自动转换,而RichInt具有abs方法,那么Scala就自动将1转换为RichInt类型,然后调用RichInt的abs方法。
Scala的基本数据类型有:Byte,Short,Int,Long和Char(这些成为整数类型)。整数类型加上Float和Double成为数值类型。此外还有String类型,除String类型在java.lang包中定义,其它的类型都定义在包scala中。比如Int的全名为scala.Int。实际上Scala运行环境自动会载入包scala和java.lang中定义的数据类型,你可以使用直接使用Int,Short,String 而无需再引入包或是使用全称。
下面的例子给出了这些基本数据类型的字面量用法,由于Scala支持数据类型推断,你在定义变量时多数可以不指明数据类型,而是由Scala运行环境自动给出变量的数据类型:
- Welcome to Scala version 2.11.0-M5 (OpenJDK 64-Bit Server VM, Java 1.7.0_25).
- Type in expressions to have them evaluated.
- Type :help for more information.
- scala> var hex=0x5
- hex: Int = 5
- scala> var hex2=0x00ff
- hex2: Int = 255
- scala> val prog=0xcafebabel
- prog: Long = 3405691582
- scala> val littler:Byte= 38
- littler: Byte = 38
- scala> val big=1.23232
- big: Double = 1.23232
- scala> val a='A'
- a: Char = A
- scala> val f ='\u0041'
- f: Char = A
- scala> val hello="hello"
- hello: String = hello
- scala> val longString=""" Welcome to Ultamix 3000. Type "Help" for help."""
- longString: String = " Welcome to Ultamix 3000. Type "Help" for help."
- scala> val bool=true
- bool: Boolean = true
- scala>
Scala的基本数据类型的字面量也支持方法(这点和Java不同,Scala中所有的数值字面量也是对象),比如:
- scala> (-2.7).abs
- res3: Double = 2.7
- scala> -2.7 abs
- warning: there were 1 feature warning(s); re-run with -feature for details
- res4: Double = 2.7
- scala> 0 max 5
- res5: Int = 5
- scala> 4 to 6
- res6: scala.collection.immutable.Range.Inclusive = Range(4, 5, 6)
这些方法其实是对于数据类型的Rich类型的方法,Rich类型将在后面再做详细介绍。