一、Scala类型层级关系
Scala中数据类型的层级关系图为:
Scala和Java一样,有8种数值类型 Byte、Char、Short、Int、Long、Float、Double和一个Boolean类型。Scala 数值类型的取值范围和 Java 对应类型的取值范围相同。和Java不同的是Scala没有基本类型和包装类型之分,这些类型都是类,有自己的属性和方法。
Unit是值类型,他只有一个实例对象()。 Nothing是所有类型的子类,他没有一个具体的实例对象,一个常见的应用如:抛出异常
程序exit、无限循环等。
Nothing是所有类型的子类,也是Null的子类。Nothing没有对象,但是可以用来定义类型。例如,如果一个方法抛出异常,则异常的返回值类型就是Nothing。
Null是所有引用类型的子类,它只有一个实例对象null,主要用来和其他的jvm语言进行互操作。
二、整数类型
Scala中的整数类型有Byte、Long、Short、Int
// 定义一个Byte类型 scala> val a:Byte = 8 a: Byte = 8 // 定义一个Short类型 scala> val b:Short = 10 b: Short = 10 // 在定义整型变量时,如果不定义Int类型,则默认定义为Int类型 scala> val c = 12 c: Int = 12 // 定义一个Int类型 scala> val c1:Int = 12 c1: Int = 12 // 定义Long类型的两种方式 scala> val d:Long = 8888 d: Long = 8888 scala> val d1 = 8888L d1: Long = 8888
三、浮点类型
浮点类型包括float类型和double类型。
浮点值是由十进制、可选的小数点、可选的e或者E以及指数部分组成。
浮点类型的数值以F或者f结束,否则就是Double类型,Double类型的数值也可以以D或者d结尾,是可选的。
浮点型常量有两种表示形式:
十进制数形式:5.12,512.0f
科学计数法形式:如5.12e2 = 5.12乘以10的2次方
// 定义浮点类型,默认是Double类型 scala> val f = 3.1415 f: Double = 3.1415 // 在小数点后加上F,定义为Float类型 scala> val f = 3.14F f: Float = 3.14 scala> val f1 = 3.14e2 f1: Double = 314.0 scala> val f1 = 3.14e2f f1: Float = 314.0 // 在小数点后加上D,定义为Double类型 scala> val d1 = 3.1415D d1: Double = 3.1415 scala> val d1 = 3.14e10 d1: Double = 3.14E10
四、字符类型
定义字符类型通常使用单引号字符赋值;也可以指定类型后,使用范围内的数字赋值
scala> val c = 'A' c: Char = A scala> val c1:Char = 'B' c1: Char = B scala> val c2:Char = 100 c2: Char = d scala> val c3 = '\n' c3: Char =
也可以使用转义字符:
五、字符串类型
String类型是有双引号包含的一个或者多个字符组成,语法和字符类型基本一致
scala> val a = "hello world" a: String = hello world
六、其他数据类型
Unit为空类型行,相当于void,使用()进行初始化
scala> val u =() u: Unit = ()
Boolean类型,只能为true,false
scala> val b1 = false b1: Boolean = false scala> val b2:Boolean = true b2: Boolean = true
Any可以接收任意的基本类型和引用类型
scala> val any:Any = 123 any: Any = 123 scala> val any:Any = null any: Any = null
AnyRef可以接收任意的引用类型
scala> val any:AnyRef = 123 <console>:11: error: the result type of an implicit conversion must be more specific than AnyRef val any:AnyRef = 123 ^ scala> val any:AnyRef = "dsd" any: AnyRef = dsd
AnyVal可以接收任意的基本类型
scala> val any:AnyVal = "df" <console>:11: error: the result type of an implicit conversion must be more specific than AnyVal val any:AnyVal = "df" ^ scala> val any:AnyVal = 123 any: AnyVal = 123
Null:null值只能被推断为Null类型,null代表为空值,可以被赋值给任何AnyRef类型的常量或变量
scala> val n = null n: Null = null scala> val any:AnyRef = null any: AnyRef = null
Option类型用来表示一个值是可选的(有值或无值)
scala> val m = Map("key1"->"value") m: scala.collection.immutable.Map[String,String] = Map(key1 -> value) scala> m.get("key1") res24: Option[String] = Some(value) scala> m.get("key2") res25: Option[String] = None
七、类型转换
自动类型转换
scala> val x:Long = 123456 x: Long = 123456 scala> val y:Float = x y: Float = 123456.0
强制类型转换
scala> val a = 9.9 a: Double = 9.9 //这样转换不成功 scala> val b:Int = a <console>:12: error: type mismatch; found : Double required: Int val b:Int = a ^ scala> val b:Int = a.toInt b: Int = 9
数值类型和字符串类型的转换
数值类型转字符串类型:
只需要在后面加上""
scala> val s1 = 1234+"" s1: String = 1234 scala> val s2 = true + "" s2: String = true scala> val s3 = 3.14 + "" s3: String = 3.14
字符串类型转数值类型:
scala> val s4 = "3.1415" s4: String = 3.1415 scala> val res = s4.toInt java.lang.NumberFormatException: For input string: "3.1415" at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) at java.lang.Integer.parseInt(Integer.java:580) at java.lang.Integer.parseInt(Integer.java:615) at scala.collection.immutable.StringLike.toInt(StringLike.scala:304) at scala.collection.immutable.StringLike.toInt$(StringLike.scala:304) at scala.collection.immutable.StringOps.toInt(StringOps.scala:33) ... 28 elided scala> val res = s4.toDouble res: Double = 3.1415 scala> res.toInt res26: Int = 3 scala> val s5 = "1234" s5: String = 1234 scala> val res = s5.toInt res: Int = 1234