一、变量定义
基本语法:
var|val 变量名 [:变量类型] = 变量值
使用var或val定义一个变量
使用var声明变量-可以被重新赋值。
// 声明变量i1,手动指定类型为Int,此时需要保证所赋值类型匹配 var i1:Int = 1 // var修饰的变量之间可以相互赋值,并可以使用var重新定义 scala> i1 = 2 i1: Int = 2
使用val声明常量-引用不可变,val修饰的变量,相当于Java中final修饰的变量
// 定义常量s1,使用字符串“1”赋值,自动推断为String类型,值不可变 scala> val s1 = "1" s1: String = 1 scala> s1 = "123" <console>:12: error: reassignment to val s1 = "123" ^ // 定义常量s2,手动指定类型为String,此时需要保证所赋值类型匹配 scala> val s2:String = "2" s2: String = 2 // 使用val定义基本数据类型时,值不可变,可以使用val重新定义 scala> val s2 = "ee" s2: String = ee
// 可以同时定义多个变量 scala> var a1,a2 = 100 a1: Int = 100 a2: Int = 100 // 也可以给每个变量赋值不同的值 scala> var (a,b,c) = (1,0.3,"abc") a: Int = 1 b: Double = 0.3 c: String = abc
二、var和val的区别
val修饰的变量,如果是基本数据类型,不能重新赋值,如果是引用类型,引用类型的地址(变量的值)不能修改,但是变量的内容是可以修改的
var修饰的变量,如果是基本数据类型,可以重新赋值,如果是引用类型,引用类型的地址(变量的值)能修改,但是变量的内容是可以修改的
例子:
// var修饰的变量是基本数据类型 scala> var a = 10 a: Int = 10 scala> a = 100 a: Int = 100 // val修饰的变量是基本数据类型 scala> val aa = 10 aa: Int = 10 scala> aa = 100 <console>:12: error: reassignment to val aa = 100 ^ // var修饰的变量是引用类型 scala> var arr1 = Array(1,2,3,4) arr1: Array[Int] = Array(1, 2, 3, 4) scala> arr1 = Array(1,2,3,4,5,6) arr1: Array[Int] = [I@34fb399b scala> arr1 res7: Array[Int] = Array(1, 2, 3, 4, 5, 6) scala> arr1(0) = 100 scala> arr1 res13: Array[Int] = Array(100, 2, 3, 4, 5, 6) // val修饰的变量是引用类型 scala> val arr2 = Array(1,2,3,4) arr2: Array[Int] = Array(1, 2, 3, 4) scala> arr2 = Array(1,2,3,4,5,6) <console>:12: error: reassignment to val arr2 = Array(1,2,3,4,5,6) ^ scala> arr2 res10: Array[Int] = Array(1, 2, 3, 4) scala> arr2(0)=12 scala> arr2 res12: Array[Int] = Array(12, 2, 3, 4)
三、变量总结
var|val 变量名 [:变量类型] = 变量值
定义变量的时候一定要初始化
val修饰的变量,如果是基本数据类型,不能重新赋值,如果是引用类型,引用类型的地址(变量的值)不能修改,但是变量的内容是可以修改的
var修饰的变量,如果是基本数据类型,可以重新赋值,如果是引用类型,引用类型的地址(变量的值)能修改,但是变量的内容是可以修改的
优先使用val修饰的变量:(1)代码可读性高(2)更快的被回收(3)适合并发编程(4)可以使用lazy修饰
编译器具有类型推断功能