1、主动求值
系统一旦启动,所有的值都计算出来
好处:后面使用的时候速度比较快
坏处:拖慢系统的启动速度,浪费内存
object LazyDemo {
val a :Int = {println("aaaaa"); 10}
def main(args: Array[String]): Unit = {
}
}
输出:aaaaa
2、惰性求值
只能用于 val
object LazyDemo {
lazy val a :Int = {println("aaaaa"); 10}
def main(args: Array[String]): Unit = {
}
}
不输出任何值
当第一次使用常量 a 时再进行计算,未使用时不求值
object LazyDemo {
val a1 :Int = {println("a1"); 10}
lazy val a2 :Int = {println("a2");10}
def a3 ={println("a3");10}
def main(args: Array[String]): Unit = {
println(a1)
println(a1)
println(a1)
println("------")
println(a2)
println(a2)
println(a2)
println("-------")
println(a3)
println(a3)
println(a3)
}
输出:
1)a1 10 10 10
2)a2 10 10 10
3)a3 10 a3 10 a3 10