先看def p:
object Json4sTest {
def main(args: Array[String]): Unit = {
def p = f
println(p)
println(p)
}
def f() = {
println("function f run...")
"f return"
}
}
/*
输出:
function f run...
f return
function f run...
f return
*/
下面是val p:
object Json4sTest {
def main(args: Array[String]): Unit = {
val p = f
println(p)
println(p)
}
def f() = {
println("function f run...")
"f return"
}
}
/*
输出:
function f run...
f return
f return
*/
总结:
val声明的变量只会在执行时赋一次值,再次使用时只能获取其已经赋过的值。def声明的变量每一次获取或使用都会重新赋值。
object Test {
def main(args: Array[String]): Unit = {
def p = {
println("p...");
val prop = new java.util.Properties()
prop.put("k1", "v1")
prop
}
println(p)
println(p)
p.put("k2", "v2")
println(p)
println(p)
}
}
/*
输出:
p...
{k1=v1}
p...
{k1=v1}
p...
p...
{k1=v1}
p...
{k1=v1}
*/
详细内容可以参考:https://blog.youkuaiyun.com/qq_29343201/article/details/56281777
本文深入探讨了Scala编程语言中val与def声明变量的区别。通过具体代码示例,展示了val声明的变量在执行时仅赋值一次,而def声明的变量每次获取或使用时都会重新计算赋值。
8664

被折叠的 条评论
为什么被折叠?



