hashCodeとは?

Java系言語におけるハッシュコードとは?

データを元に作り出した整数値です。
各オブジェクトに割り振った一種の識別番号で、ハッシュコードを用いることでオブジェクトの同一性の判定が高速化され、オブジェクトの検索などの処理が効率良く行えます。
http://www.kab-studio.biz/Programing/JavaA2Z/Word/00000045.html

scala> case class Iphone(color:String, price:Int)
defined class Iphone

scala> val x = Iphone("green", 900)
x: Iphone = Iphone(green,900)

scala> a.hashCode
res1: Int = 1732122428

scala> x == a
res2: Boolean = false

scala> val y = Iphone("green", 900)
y: Iphone = Iphone(green,900)

scala> x == y
res3: Boolean = true

同一の内容を持つオブジェクトは必ず同一のハッシュコードを持つように定義されますが、同一のハッシュコードをもつオブジェクトが必ずしも同じ内容とは限りません。

今回の例ではケースクラス作成時にhashCodeも作成されるので、定義する必要はありませんでした。
しかしequalsメソッドとhashCodeメソッドを定義する際には、下のように決まり事があるようです。

→equalsメソッドとhashCodeメソッドは、「2つのオブジェクトがequalsメソッドで等しいと判定された場合、両者のハッシュコードは等しくなければならない。」という規定があります。なのでequalsメソッドをオーバーライドした時には、hashCodeメソッドもオーバーライドするようにする必要があります。
http://xerial.org/scala-cookbook/recipes/2012/07/05/equality/