1. 数据类型与操作符
1.1 数据类型
| 基础类型 | 类型说明 |
|---|---|
| Byte | 8位带符号整数 |
| Short | 16位带符号整数 |
| Int | 32位带符号整数 |
| Long | 64位带符号整数 |
| Char | 16位无符号Unicode字符 |
| String | Char类型的序列(字符串) |
| Float | 32位单精度浮点数 |
| Double | 64位双精度浮点数 |
| Boolean | true或false |
注意下 scala类型与Java的区别
[!NOTE]
- scala中所有的类型都使用大写字母开头
- 整形使用
Int而不是Integer- scala中定义变量可以不写类型,让scala编译器自动推断
1.2 运算符
| 类别 | 操作符 |
|---|---|
| 算术运算符 | +、-、*、/ |
| 关系运算符 | >、<、==、!=、>=、<= |
| 逻辑运算符 | &&、||、! |
| 位运算符 | &、||、^、<<、>> |
-
scala中没有,++、--运算符
-
与Java不一样,在scala中,可以直接使用
==、!=进行比较值,比较引用值得时候,需要使用eq
参考代码
val str1 = "abc"
val str2 = str1 + ""
str1 == str2 true
str1.eq(str2) false
1.3 scala类型层次结构
| 类型 | 说明 |
|---|---|
| Any | 所有类型的父类,,它有两个子类AnyRef与AnyVal |
| AnyVal | 所有数值类型的父类 |
| AnyRef | 所有对象类型(引用类型)的父类 |
| Unit | 表示空,Unit是AnyVal的子类,它只有一个的实例{% em %}() {% endem %} 它类似于Java中的void,但scala要比Java更加面向对象 |
| Null | Null是AnyRef的子类,也就是说它是所有引用类型的子类。它的实例是{% em %}null{% endem %} 可以将null赋值给任何对象类型 |
| Nothing | 所有类型的子类 不能直接创建该类型实例,某个方法抛出异常时,返回的就是Nothing类型,因为Nothing是所有类的子类,那么它可以赋值为任何类型 |
2. 条件表达式
2.1 有返回值
[!NOTE]
- 在scala中,条件表达式也是有返回值的
- 在scala中,没有三元表达式,可以使用if表达式替代三元表达式
scala> val age:Int = 20
age: Int = 20
// 此时得result是可以接接收到值得,说明if表达式可以返回结果
scala> val result:Boolean = if(age == 20) true else false
result: Boolean = true
scala> print(result)
true
2.2 块表达式
- scala中,使用{}表示一个块表达式
- 和if表达式一样,块表达式也是有值的
- 值就是最后一个表达式的值
// 1、因为没有最后一个表达式,所以返回为空
scala> val a = {
| println("jack")
| }
jack
a: Unit = ()
// 2、此时返回最后一个 1 + 1得值
scala> val b = {
| println("haode")
| 1 + 1
| }
haode
b: Int = 2
3. 循环
3.1 for表达式
语法
for(i <- 表达式/数组/集合) {
// 表达式
}
3.1.1 简单循环
遍历 1 到 10 得数字
// 1、我们可以先得到1 到10 得数字,然后再进行遍历
scala> val nums = 1.to(10)
nums: scala.collection.immutable.Range.Inclusive = Range(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
scala> for(i <- nums) println(i)
// 2、使用中缀调用法(后面得章节中会讲到,这里就先不给大家介绍啦)
scala> for(i <- 1 to 10) println(i)
3.1.2 嵌套循环
for(i <- 1 to 3; j <- 1 to 5) {print("*");if(j == 5) println("")}
结果:
*****
*****
*****
3.1.3 守卫
守卫就是可以在for表达式中添加if判断语句
语法
for(i <- 表达式/数组/集合 if 表达式) {
// 表达式
}
// 添加守卫,打印能够整除3的数字
for(i <- 1 to 10 if i % 3 == 0) println(i)
3.1.4 for推导式
-
将来可以使用for推导式生成一个新的集合(一组数据)
-
在for循环体中,可以使用yield表达式构建出一个集合,我们把使用yield的for表达式称之为推导式
// for推导式:for表达式中以yield开始,该for表达式会构建出一个集合
scala> val a = for(i <- 1 to 10) yield i * 10
a: scala.collection.immutable.IndexedSeq[Int] = Vector(10, 20, 30, 40, 50, 60, 70, 80, 90, 100)
3.2 while循环
scala中得while循环和java中得是一样得
scala> var i = 1
i: Int = 1
scala> while(i <= 10) {
| println(i)
| i = i+1
| }
3.3 break和continue
- 在scala中,类似Java和C++的break/continue关键字被移除了
- 如果一定要使用break/continue,就需要使用scala.util.control包的Break类的breable和break方法。
3.3.1 实现break
// 1、导入scala.util.control包下的Break
import scala.util.control.Breaks._
// 2、使用breakable将for表达式包起来
breakable{
for(i <- 1 to 100) {
// 3、for表达式中需要退出循环的地方,添加`break()`方法调用
if(i >= 50) break()
else println(i)
}
}
3.3.2 实现continue
// 1、导入scala.util.control包下的Break
import scala.util.control.Breaks._
// 2、使用breakable将for的循环体包起来
for(i <- 1 to 100 ) {
breakable{
if(i % 10 == 0) break()
else println(i)
}
}