Scala学习笔记——Scala数据类型

在Scala中,一切都是对象,即使是一个整数也是对象:

  1. scala> 1
  2. 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 整数:
  1. scala> 010
  2. res2: Int = 8
复制代码
如果你直接撰写一个浮点数,则默认会是个Double ,加上F f 可以指定其为Float ,你也可以使用特学记号来表示浮点数:
  1. scala> 3.14
  2. res5: Double = 3.14
  3. scala> 3.14F
复制代码
字符是以单引号包裹住,也可以指定Unicode 编码:
  1. scala> 'A'
  2. res9: Char = A
  3. scala> '\u0041'
复制代码

\作开头为转义字符,如以上指定Unicode编码是其中一例,你还可以有以下的字符来转义:

  
\\
  
  
反斜线
  
  
\'
  
  
单引号  '
  
  
\"
  
  
双引号"
  
  
\uxxxx
  
  
以16  进位数指定Unicode字元输出
  
  
\b
  
  
倒退一个字元
  
  
\f
  
  
换页
  
  
\n
  
  
换行
  
  
\r
  
  
光标移至行首
  
  
\t
  
  
跳格(一个Tab键)
  






Scala中,若要取得整数、浮点数等的数值范围,则可以使用scala.Math(这是一个object定义)中所定义的值(在Java中则是定义在各自的包裹对象上,如IntegerDouble等),例如:

  1. println("Int: " + Math.MIN_INT + " ~ " + Math.MAX_INT)
  2. println("Long: " + Math.MIN_LONG + " ~ " + Math.MAX_LONG)
  3. println("Float: " + Math.MIN_FLOAT + " ~ " + Math.MAX_FLOAT)
  4. println("Double: " + Math.MIN_DOUBLE + " ~ " + Math.MAX_DOUBLE)
复制代码

这个程式会显示以下结果:

  1. Int: -2147483648 ~ 2147483647
  2. Long: -9223372036854775808 ~ 9223372036854775807
  3. Float: -3.4028235E38 ~ 3.4028235E38
  4. Double: -1.7976931348623157E308 ~ 1.7976931348623157E308
复制代码

在Scala中,如整数、浮点数等基本类型,可以直接作一些操作,例如:

  1. scala> -13 abs
  2. res5: Int = 13
  3. scala> 1 max 2
  4. res6: Int = 2
  5. scala> 3.14 round
  6. res7: Long = 3
  7. 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
  

你可能感兴趣的:(scala)