如果我有这个值类:
class ActionId(val value: Int) extends AnyVal
Run Code Online (Sandbox Code Playgroud)
那么,在下面的所有例子中,将为值类分配一个对象?(它将被"装箱" - 它不会简单地打开到一个普通的32位整数,对吧?)
一个返回值类的函数 - 值类会转义范围,因此会被"装箱"?
def someFunction(): ActionId = {
...
return ActionId(123)
}
Run Code Online (Sandbox Code Playgroud)返回具有值类成员的对象的函数- 值类会转义范围,因此将"装箱"?
case class Post(id: ActionId, ...) { ... }
def someFunction(): Post = {
...
val somePost = Post(ActionId(123), ...) // ActionId will be "boxed", right?
return somePost
}
Run Code Online (Sandbox Code Playgroud)即使一个值类成员的对象是未在返回(并没有真正逃脱的范围),该值类仍然会"盒装",当它被用作另一个类的成员(作为一个字段Post
级,在这个例子中)?
def anotherFunction() {
...
val somePost = Post(ActionId(123), ...) // "Boxed" here too, right?
// ... do …
Run Code Online (Sandbox Code Playgroud)