Scala引用相等

Lan*_*uhn 48 scala

如何在Scala中测试引用相等性?

val x = new Obj
val y = x
x.referenceEquals(y) // evaluates to true
Run Code Online (Sandbox Code Playgroud)

JAi*_*iro 66

您正在寻找的功能eqAnyRef的成员:

val x = new Obj
val y = x
x eq y // evaluates to true
x ne y // evaluates to false
Run Code Online (Sandbox Code Playgroud)

  • 它的逆是"ne".您很可能希望在中缀表示法中使用它.注意,当目标对象为null时,`eq`,`ne`,`==`和`!=`不会抛出`NullPointerException`,即使它看起来可能是这样(特别是在非中缀表示法中) ). (4认同)
  • @Jean:如果我在上面添加了行"val z = null"(非常糟糕的Scala形式),你是说z.eq(x)即使z为空也不会抛出异常?我对此持怀疑态度,于是访问了http://www.simplyscala.com/(在线访问REPL)并以交互方式进行了尝试.而且你是对的.这非常棒,肯定比Java投掷NPE更好.Tyvm澄清. (3认同)
  • 谢谢你!作为记录,这记录在此处:http://www.scala-lang.org/api/current/scala/AnyRef.html (2认同)
  • @ chaotic3quilibrium完全正确.看起来那些"方法"受益于一点编译魔术.:-) (2认同)