1 变量
1.1 数据类型
- scala中的数据类型和java中数据类型最大的区别就是scala中的数据类型都是对象 , 也就是scala中没有原生的数据类型!
- scala中的数据类型分成两类 AnyVal(值类型)和AnyRef(引用类型) , 两种对象都属于Any ,都是对象
val age:Int = 23
age是一个Int数值类型的变量 , 数值类型的变量也属于一个对象 , 所以age变量就是一个对象,也拥有很多方法
数据类型一览图
|
- Any : 所有类型的父类 , 类似于java中的Object
- AnyVal: 数值类型(简单类型)
- AnyRef: 引用数据类型
- Null: 应用类型的子类,类似于java中的null ,是所有引用类型的子类
- Nothing: 所以类型的子类 可以返回给任意的变量或者函数 通常异常时使用,表示此处有错误
1.2 变量的定义
格式: var | val 变量名称:变量类型 = 变量值
数据类型可以省略 ,scala编译器可以对数据类型进行推断。
var 可变的变量
val 不可变的变量 (在不改变值的情况下优先使用val)
//使用val定义的变量值是不可变的,相当于java里用final修饰的变量
val i = 1
//使用var定义的变量是可变的,在Scala中鼓励使用val
var s = "hello"
//Scala编译器会自动推断变量的类型,必要的时候可以指定类型
//变量名在前,类型在后
val str: String = "world"
1)数据类型可以指定,也可以不指定,如果不指定,那么就会进行数据类型的推断。
2)如果指定数据类型,数据类型的执行 方式是 在变量名后面写一个冒号,然后写上数据类型。
3)我们的scala里面变量的修饰符一共有两个,一个是var 一个是val,如果是var修饰的变量,那么这个变量的值是可以修改的。如果是val修饰的变量,那么这个变量的值是不可以修改的。
- val 在编程的过程中我们大部分的操作是获取值或者是获取一个创建好的对象,然后操作对象中的属性,很少改变这个对象变量
- val 是线程安全的 , 在使用的时候效率更高
- 优先使用val ,但是当变量后续的需要变化的时候使用var
1.3 数据类型转换
- 数值类型之间转换的时候使用toXXX
- 引用数据类型 , 使用val a = b.asInstanceOf[A] 强制转换(继承关系)
类型转换遵循的基本原则和java中的一致 , 高精度的类型转换成低精度的时候有可能出现精度丢失问题,
低精度的数据可以直接隐式的转换成高精度的数据
2 运算读
2..1算术运算符
object Test {
def main(args: Array[String]) {
var a = 10;
var b = 20;
var c = 25;
var d = 25;
println("a + b = " + (a + b) );
println("a - b = " + (a - b) );
println("a * b = " + (a * b) );
println("b / a = " + (b / a) );
println("b % a = " + (b % a) );
println("c % a = " + (c % a) );
}
}
2.2 关系运算符
运算符 |
描述 |
实例 |
== |
等于 |
(A == B) 运算结果为 false |
!= |
不等于 |
(A != B) 运算结果为 true |
> |
大于 |
(A > B) 运算结果为 false |
< |
小于 |
(A < B) 运算结果为 true |
>= |
大于等于 |
(A >= B) 运算结果为 false |
<= |
小于等于 |
(A <= B) 运算结果为 true |
def main(args: Array[String]) {
var a = 10;
var b = 20;
println("a == b = " + (a == b) );
println("a != b = " + (a != b) );
println("a > b = " + (a > b) );
println("a < b = " + (a < b) );
println("b >= a = " + (b >= a) );
println("b <= a = " + (b <= a) );
}
2.3 逻辑运算符
运算符 |
描述 |
实例 |
&& |
逻辑与 |
(A && B) 运算结果为 false |
|| |
逻辑或 |
(A || B) 运算结果为 true |
! |
逻辑非 |
!(A && B) 运算结果为 true |
val a = true
val b = false
println("a && b = " + (a && b))
println("a || b = " + (a || b))
println("!(a && b) = " + !(a && b))
2.4 赋值运算符
运算符 |
描述 |
实例 |
= |
简单的赋值运算,指定右边操作数赋值给左边的操作数。 |
C = A + B 将 A + B 的运算结果赋值给 C |
+= |
相加后再赋值,将左右两边的操作数相加后再赋值给左边的操作数。 |
C += A 相当于 C = C + A |
-= |
相减后再赋值,将左右两边的操作数相减后再赋值给左边的操作数。 |
C -= A 相当于 C = C - A |
*= |
相乘后再赋值,将左右两边的操作数相乘后再赋值给左边的操作数。 |
C *= A 相当于 C = C * A |
/= |
相除后再赋值,将左右两边的操作数相除后再赋值给左边的操作数。 |
C /= A 相当于 C = C / A |
%= |
求余后再赋值,将左右两边的操作数求余后再赋值给左边的操作数。 |
C %= A is equivalent to C = C % A |
<<= |
按位左移后再赋值 |
C <<= 2 相当于 C = C << 2 |
>>= |
按位右移后再赋值 |
C >>= 2 相当于 C = C >> 2 |
&= |
按位与运算后赋值 |
C &= 2 相当于 C = C & 2 |
^= |
按位异或运算符后再赋值 |
C ^= 2 相当于 C = C ^ 2 |
|= |
按位或运算后再赋值 |
C |= 2 相当于 C = C | 2 |