scala-01-变量
2020-04-04 本文已影响0人
chen_666
1.变量的定义
var | val 变量名 [: 变量类型] = 变量值
2.注意事项
- 声明变量时,类型可以省略(就是叫 类型推断)
- 类型确定后,就不能修改,说明Scala 是强数据类型语言.
- 在声明/定义一个变量时,可以使用var 或者 val 来修饰, var 修饰的变量可改变,val 修饰的变量不可改 [案例].(推荐使用val,线程安全,使用效率高)
- val修饰的变量在编译后,等同于加上final
- var 修饰的对象引用可以改变,val 修饰的则不可改变,但对象的状态(值)却是可以改变的。(比如: 自定义对象、数组、集合等等
- 变量声明时,需要初始值
var name: String = "smith"
var num1 = 100 //类型推断
//num1 = "jack" 类型确定后就不能再修改
//var 是可以变的。
var name = "小红"
name = "小黑"
//val 是不可变的变量
val namel = "小白"
//namel = "小黄"
val (month, age, ticket) = (8, 20, 60.0) //可一次性定义多个变量
3.数据类型
image.png
- Any是所有类的根类型,即所有类的父类(基类)
- 在scala中类分为两个大的类型分支(AnyVal [值类型,可以理解成java的基本数据类型], AnyRef类型)
- 在AnyVal 虽然叫值类型,但是仍然是类(对象)
- 在scala中有两个特别的类型(Null ), 还有一个是Nothing
- Null 类型只有一个实例 null, 他是bottom class ,是AnyRef的子类.
- Nothing 类型是所有类的子类, 它的价值是在于因为它是所有类的子类,就可以将Nothing类型的对象返回给任意的变量或者方法,比如案例
def f1():Nothing= { //表示f1方法就是没有正常的返回值,专门用于返回异常
throw new Exception("异常发生")
}- 在scala中仍然遵守 低精度的数据自动的转成 高精度的数据类型。
- 在scala中,Unit 类型比较特殊,这个类型也只有一个实例 ()
- 强制类型转换,自动类型转换的逆过程,将容量大的数据类型转换为容量小的数据类型。使用时要加上强制转函数,但可能造成精度降低或溢出,格外要注意
val num = 2.22.toInt
println(num)//2