Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What is the difference between a.ne(null) and a != null in Scala?

Tags:

null

scala

I have been always using

a != null

to check that a is not a null reference. But now I've met another way used:

a.ne(null)

what way is better and how are they different?

like image 602
Ivan Avatar asked Apr 08 '12 22:04

Ivan


2 Answers

Like @Jack said x ne null is equal to !(x eq null). The difference between x != null and x ne null is that != checks for value equality and ne checks for reference equality.

Example:

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
like image 151
drexin Avatar answered Oct 01 '22 23:10

drexin


Besides that said @drexin and @Jack, ne defined in AnyRef and exists only for referential types.

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
like image 31
om-nom-nom Avatar answered Oct 02 '22 00:10

om-nom-nom