将def与val用于常量值有什么含义

kni*_*ttl 10 scala function idiomatic immutability

在Scala 中使用defvs. val来定义一个常量的不可变值有什么含义?我显然可以写下面的内容:

val x = 3;
def y = 4;
var a = x + y; // 7
Run Code Online (Sandbox Code Playgroud)

这两个陈述之间有什么区别?哪一个表现更好/是推荐的方式/更惯用?我何时会使用一个而不是另一个?

Lui*_*hys 11

假设这些是类级声明:

编译器将创建一个val final,这可以导致VM更好地优化代码.

A def不会将值存储在对象实例中,因此会节省内存,但每次都需要对方法进行评估.

为了两全其美,请创建一个伴随对象并在val那里声明常量.

即代替

class Foo {
  val MyConstant = 42
}
Run Code Online (Sandbox Code Playgroud)

这个:

class Foo {}

object Foo {
  val MyConstant = 42
}
Run Code Online (Sandbox Code Playgroud)

  • @knittl如果你有一千个实例,一个字段将被存储一千次.方法定义仅存储一次. (3认同)