Scala FAQ: What is the difference between Nil
and List()
in Scala?
Short answer: There isn’t any difference, as shown in the Scala REPL:
scala> Nil == List() res0: Boolean = true
It’s more “idiomatic Scala” Scala to use Nil
rather than List()
. For instance, I wrote code like this last night using Nil
in a Scala match/case expression:
post match { case '\n' :: rest => splitString(post, acc += pre.mkString) case Nil => acc += pre.mkString case _ => Nil }
But either Nil
or List()
will work in that situation.
Java’s System.identityHashCode
As a longer answer, this SO post shows a method named System.identityHashCode
that I didn’t know about:
scala> System.identityHashCode(Nil) 374527572 scala> System.identityHashCode(List()) 374527572
As I’ll demonstrate shortly, this shows that Nil
and List()
have the same hash code value. Oracle’s System Javadoc states this about identityHashCode
:
"Returns the same hash code for the given object as would be returned by the default method
hashCode()
, whether or not the given object's class overrideshashCode()
."
That’s a nice utility.
Manually comparing hash codes
Having seen that fancy approach, I now realize that I can compare Nil
and List()
in the Scala REPL like this:
scala> Nil.hashCode res1: Int = 473519988 scala> List().hashCode res2: Int = 473519988
Again, cool.