scala:val和def定义变量的区别

先看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.csdn.net/qq_29343201/article/details/56281777

posted @ 2018-12-29 09:04  xuejianbest  阅读(1404)  评论(0编辑  收藏  举报