对常数值使用def . val的含义是什么?



在Scala中使用defval来定义常量、不可变值的含义是什么?我显然可以这样写:

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是作为一个方法实现的,每次都重新求值,但不使用内存空间来存储结果值。

最新更新