Scala基础
数据类型 | 描述 |
Byte | 8位有符号补码整数。数值区间为 -128 到 127 |
Short | 16位有符号补码整数。数值区间为 -32768 到 32767 |
Int | 32位有符号补码整数。数值区间为 -2147483648 到 2147483647 |
Long | 64位有符号补码整数。数值区间为 -9223372036854775808 到 9223372036854775807 |
Float | 32 位, IEEE 754标准的单精度浮点数 |
Double | 64 位 IEEE 754标准的双精度浮点数 |
Char | 16位无符号Unicode字符, 区间值为 U+0000 到 U+FFFF |
String | 字符序列 |
Boolean | true或false |
Unit | 表示无值,和其他语言中void等同。用作不返回任何结果的方法的结果类型。Unit只有一个实例值,写成()。 |
Null | null |
Nothing | Nothing类型在Scala的类层级的最低端;它是任何其他类型的子类型。 |
Any | Any是所有其他类的超类 |
AnyRef | AnyRef类是Scala里所有引用类(reference class)的基类 |
使用细节和注意事项
1) Null类只有一个实例对象,null,类似于Java中的null引用。null可以赋值给任意引用类型(AnyRef),但是不能赋值给值类型(AnyVal: 比如 Int, Float, Char, Boolean, Long, Double, Byte, Short)
2) Unit类型用来标识过程,也就是没有明确返回值的函数。由此可见,Unit类似于Java里的void。Unit只有一个实例,(),这个实例也没有实质的意义
3) Nothing,可以作为没有正常返回值的方法的返回类型,非常直观的告诉你这个方法不会正常返回,而且由于Nothing是其他任意类型的子类,他还能跟要求返回值的方法兼容。
4)当Scala程序在进行赋值或者运算时,精度小的类型自动转换为精度大的数据类型,这个就是自动类型转换(隐式转换 implicit conversion)。
5) (byte, short) 和 char之间不会相互自动转换。byte,short,char 他们三者可以计算,在计算时首先转换为int类型。
运算符
1)Scala中是没有三元运算符,因为可以这样简写 : val result = if (flg) 1 else 0
2)范围数据循环
for(i <- 1 to 3){
print(i + " ")
}
println()
------------------------------------
for(i <- 1 until 3) {
print(i + " ")
}
println()
------------------------------------
3)循环守卫
for(i <- 1 to 3 if i != 2) {
print(i + " ")
}
println()
------------------------------------
4)引入变量
for(i <- 1 to 3; j = 4 - i) {
print(j + " ")
}
------------------------------------
5)嵌套循环
for(i <- 1 to 3; j <- 1 to 3) {
println(" i =" + i + " j = " + j)
}
6)循环返回值
val res = for(i <- 1 to 10) yield i * 2
println(res)
将遍历过程中处理的结果返回到一个新Vector集合中,使用yield关键字
7)使用花括号{}代替小括号()
var retVal = for{ a <- numList
if a != 3; if a < 8
}yield a
(1){}和()对于for表达式来说都可以
(2)for 推导式有一个不成文的约定:当for 推导式仅包含单一表达式时使用圆括号,当其包含多个表达式时使用大括号
(3)当使用{} 来换行写表达式时,分号就不用写了
8)scala 的for循环的步长如何控制! [for(i <- Range(1,3,2)]
9)while和do…while中没有返回值,所以不推荐使用,而是推荐使用for循环
10)Scala内置控制结构特地去掉了break和continue,是为了更好的适应函数化编程,推荐使用函数式的风格解决break和contine的功能,而不是一个关键字。
集合(不可变)
集合(可变)
多维数组的定义和使用
//定义
val arr = Array.ofDim[Double](3,4)
//赋值
arr(1)(1) = 11.11