在Scala中使用def
和val
来定义常量、不可变值的含义是什么?我显然可以这样写:
val x = 3;
def y = 4;
var a = x + y; // 7
这两个语句的区别是什么?哪一种表现更好/被推荐的方式/更习惯?什么时候我应该用其中一个而不是另一个?
假设这些是类级别的声明:
编译器将生成一个val
final
,这可以导致VM更好地优化代码。
def
不会将值存储在对象实例中,因此会节省内存,但要求每次都对方法进行求值。
为了两全其美,创建一个伴侣对象并在那里将常量声明为val
。
。而不是
class Foo {
val MyConstant = 42
}
:
class Foo {}
object Foo {
val MyConstant = 42
}
val
计算一次并存储在一个字段中。def
是作为一个方法实现的,每次都重新求值,但不使用内存空间来存储结果值。