语法
1. var | val 变量名 [: 变量类型] = 变量值
2. 声明变量时,类型可以省略(类型推断)
3. 类型确定后,就不能修改,Scala 是强数据类型语言.
4. 在声明/定义一个变量时,可以使用 var 或者 val 来修饰, var 修饰的变量可改变,val 修饰的变量不可改 (推荐使用val,线程安全,使用效率高)
5. val 修饰的变量在编译后,等同于加上 final
6. var 修饰的对象引用可以改变,val 修饰的则不可改变,但对象的状态(值)却是可以改变的。(比如: 自定义对象、数组、集合等等)
7. 变量声明时,需要赋初始值
object VarDemo {
def main(args: Array[String]): Unit = {
//创建一个对象
//1. dog 是val 修饰的,即 dog 是不可变,即 dog 的应用不可变
//2. 但是 dog.name 是 var 他的属性可变
val dog = new Dog
//dog = null [error]
dog.name = "大狗"
var dog2 = new Dog
dog2 = null
dog2.name = "小黄"
//变量声明时,需要初始值(显示初始化)。
var job: String = "大数据工程师"
}
}
class Dog {
var name = "tom" //初始化 name 为tom
}
数据类型
Scala 与 Java有着相同的数据类型,在 Scala 中数据类型都是对象,比如 (Int, Float, Char....), 也就是说 Scala 没有 Java 中的原生类型, 数据类型分为两大类 AnyVal (值类型) 和 AnyRef (引用类型),AnyVal 还是 AnyRef 都是对象
- 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 类型比较特殊,这个类型也只有一个实例 ()
- Scala 各整数类型有固定的表数范围和字段长度,不受具体 OS 的影响,以保证 Scala 程序的可移植性
- Scala 的整型 常量/字面量 默认为 Int 型,声明 Long 型 常量/字面量 须后加 "l" 或 "L"
- Scala 程序中变量常声明为 Int 型,除非不足以表示大数,才使用 Long
- Scala 的浮点型常量默认为 Double 型,声明 Float 型常量,须后加 ‘f’ 或 ‘F’
- Null 类只有一个实例对象,null,类似于 Java 中的 null 引用。null 可以赋值给任意引用类型(AnyRef),但是不能赋值给值类型 (AnyVal: 比如 Int, Float, Char, Boolean, Long, Double, Byte, Short)
- Unit 类型用来标识过程,也就是没有明确返回值的函数。由此可见,Unit 类似于 Java 里的 void。Unit 只有一个实例,(),这个实例也没有实质的意义
- Nothing,可以作为没有正常返回值的方法的返回类型,非常直观的告诉你这个方法不会正常返回,而且由于 Nothing 是其他任意类型的子类,他还能跟要求返回值的方法兼容
强制类型转换
var num : Int = 2.7.toInt