基本语法
var | val 变量名 [: 变量类型] = 变量值
var 是变量 ,val是常量
说明:在Scala中声明一个变量时,可以不指定类型,编译器根据值确定
demo
(1)声明变量时,类型可以省略(编译器自动推导,即类型推导)
 (2)类型确定后,就不能修改,说明Scala是强数据类型语言。
 (3)变量声明时,需要初始值
object TestVar {
    def main(args: Array[String]): Unit = {
        //(1)声明变量时,类型可以省略(编译器自动推导,即类型推导)
        var age = 18
        age = 30
        //(2)类型确定后,就不能修改,说明Scala是强数据类型语言。
//        age = "tom" // 错误
        //(3)变量声明时,需要初始值
//        var name //错误
    }
}(4)在声明/定义一个变量时,可以使用var或者val来修饰,var修饰的变量可改变,val修饰的变量不可改。
object TestVar {
    def main(args: Array[String]): Unit = {
        var num1 = 10   // 可变
        val num2 = 20   // 不可变
        num1 = 30  // 正确
        //num2 = 100  //错误,因为num2是val修饰的
    }
}(5)val修饰的变量在编译后,等同于加上final通过反编译看下底层代码
object TestVar {
    var num1 = 10   // 可变
    val num2 = 20   // 不可变
    def main(args: Array[String]): Unit = {
        num1 = 30  // 正确
        //num2 = 100  //错误,因为num2是val修饰的
    }
}
通过反编译软件,得到对应的底层的.class是
public final class TestVar$
{
    public static final MODULE$;
    private int num1;
    private final int num2;(6)var修饰的对象引用可以改变,val修饰的则不可改变,但对象的状态(值)却是可以改变的。(比如:自定义对象、数组、集合等等)
object TestVar {
    def main(args: Array[String]): Unit = {
        // p1是var修饰的,p1的属性可以变,而且p1本身也可以变
        var p1 = new Person()
        p1.name = "dalian"
        p1 = null
        // p2是val修饰的,则p2的属性可以变,但是p2本身不可变(即p2的内存地址不能变)
        val p2 = new Person()
        p2.name="xiaolian"
//        p2 = null // 错误的,因为p2是val修饰的
    }
}
class Person{
    var name : String = "jinlian"
}                
                










