Подтвердить что ты не робот

В чем разница между a.ne(null) и a!= Null в Scala?

Я всегда использовал

a != null

чтобы проверить, что a не является нулевой ссылкой. Но теперь я встретил другой способ:

a.ne(null)

Какой способ лучше и как они отличаются?

4b9b3361

Ответ 1

Как @Jack сказал, что x ne null равно !(x eq null). Разница между x != null и x ne null заключается в том, что != проверяет равенство значения и ne проверяет ссылочное равенство.

Пример:

scala> case class Foo(x: Int)
defined class Foo

scala> Foo(2) != Foo(2)
res0: Boolean = false

scala> Foo(2) ne Foo(2)
res1: Boolean = true

Ответ 2

Кроме того, что @drexin и @Jack, ne определены в AnyRef и существуют только для ссылочных типов.

scala> "null".ne(null)
res1: Boolean = true

scala> 1.ne(null)
<console>:5: error: type mismatch;
 found   : Int
 required: ?{val ne: ?}
Note that implicit conversions are not applicable because they are ambiguous:
 both method int2Integer in object Predef of type (Int)java.lang.Integer
 and method intWrapper in object Predef of type (Int)scala.runtime.RichInt
 are possible conversion functions from Int to ?{val ne: ?}
       1.ne(null)

scala> 1 != null
res2: Boolean = true