Scala中的var和val定义有什么区别?为什么这两种定义都需要?为什么你会选择val而不是var,反之亦然?
当前回答
简单来说:
var = 变量
Val =变量+ final
其他回答
Val表示不可变,var表示可变
您可以将val视为Java编程语言的final key world或c++语言的const key world。
就像它的名字一样简单。
Var表示它可以变化 Val表示不变
区别在于var可以被重新赋值,而val则不能。可变性,或其他任何实际分配的东西,是一个次要问题:
import collection.immutable
import collection.mutable
var m = immutable.Set("London", "Paris")
m = immutable.Set("New York") //Reassignment - I have change the "value" at m.
而:
val n = immutable.Set("London", "Paris")
n = immutable.Set("New York") //Will not compile as n is a val.
因此:
val n = mutable.Set("London", "Paris")
n = mutable.Set("New York") //Will not compile, even though the type of n is mutable.
如果您正在构建一个数据结构,并且它的所有字段都是val,那么该数据结构因此是不可变的,因为它的状态不能改变。
Val值是类型存储常量。一旦创建它的价值不能重新分配。可以用关键字val定义一个新值。
如。val x: Int = 5
这里type是可选的,因为scala可以从赋值推断它。
变量是类型化的存储单元,只要保留内存空间,就可以再次为其赋值。
如。var x: Int = 5
一旦不再需要存储在这两个存储单元中的数据,JVM就会自动取消对它们的分配。
在scala中,值比变量更受欢迎,因为它们给代码带来了稳定性,尤其是在并发和多线程代码中。
Val表示最终值,不能重新赋值
而Var可以在以后重新分配。