Scala深入学习之数据类型学习

简介: 笔记

一、Scala类型层级关系

Scala中数据类型的层级关系图为:

1.png

Scala和Java一样,有8种数值类型 Byte、Char、Short、Int、Long、Float、Double和一个Boolean类型。Scala 数值类型的取值范围和 Java 对应类型的取值范围相同。和Java不同的是Scala没有基本类型和包装类型之分,这些类型都是类,有自己的属性和方法。

2.png


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 =

也可以使用转义字符:

3.png


五、字符串类型


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


七、类型转换


自动类型转换

4.png

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


相关文章
|
1月前
|
分布式计算 大数据 Java
大数据-87 Spark 集群 案例学习 Spark Scala 案例 手写计算圆周率、计算共同好友
大数据-87 Spark 集群 案例学习 Spark Scala 案例 手写计算圆周率、计算共同好友
50 5
|
1月前
|
分布式计算 关系型数据库 MySQL
大数据-88 Spark 集群 案例学习 Spark Scala 案例 SuperWordCount 计算结果数据写入MySQL
大数据-88 Spark 集群 案例学习 Spark Scala 案例 SuperWordCount 计算结果数据写入MySQL
50 3
|
6月前
|
Scala 容器
Scala学习--day04--集合、常用方法、案例实操 - WordCount TopN、不同省份的商品点击排行
Scala学习--day04--集合、常用方法、案例实操 - WordCount TopN、不同省份的商品点击排行
108 2
|
6月前
|
消息中间件 分布式计算 大数据
Scala学习--day03--函数式编程
Scala学习--day03--函数式编程
102 2
|
6月前
|
Java Scala
Scala学习--day02---控制流、“九层妖塔—杨辉三角”
Scala学习--day02---控制流、“九层妖塔—杨辉三角”
194 1
|
6月前
|
Java 编译器 API
Scala学习--day01变量与数据类型、运算符
Scala学习--day01变量与数据类型、运算符
|
6月前
|
存储 Scala
Scala变量和数据类型
Scala变量和数据类型
50 1
|
6月前
|
Java Shell API
Scala入门【变量和数据类型】
Scala入门【变量和数据类型】
|
存储 算法 Java
Scala学习三-面向对象
前面我们已经学习了特质类似接口,其可以被继承,同时如果需要继承多个特质的话,则需要使用extends…with…进行继承。其类似java中的接口和抽象方法的结合体,但又比java中的其要强大,因为其可以定义抽象字段和普通字段、抽象方法和普通方法。而在java中接口中可以定义常量,不能定义变量。同时特质还可以继承class类,而在java中接口通常是用来实现的。 Object继承trait
136 0
Scala学习三-面向对象