scala中的case class和普通class的區別以下:java
一、初始化的時候能夠不用new,固然你也能夠加上,普通類必定須要加new;es6
scala> case class Iteblog(name:String) defined class Iteblog scala> val iteblog = Iteblog("iteblog_hadoop") iteblog: Iteblog = Iteblog(iteblog_hadoop) scala> val iteblog = new Iteblog("iteblog_hadoop") iteblog: Iteblog = Iteblog(iteblog_hadoop)
二、toString的實現更漂亮;app
scala> iteblog res5: Iteblog = Iteblog(iteblog_hadoop)
三、默認實現了equals 和hashCode;函數
scala> val iteblog2 = Iteblog("iteblog_hadoop") iteblog2: Iteblog = Iteblog(iteblog_hadoop) scala> iteblog == iteblog2 res6: Boolean = true scala> iteblog.hashCode res7: Int = 57880342
四、默認是能夠序列化的,也就是實現了Serializable ;oop
scala> class A defined class A scala> import java.io._ import java.io._ scala> val bos = new ByteArrayOutputStream bos: java.io.ByteArrayOutputStream = scala> val oos = new ObjectOutputStream(bos) oos: java.io.ObjectOutputStream = java.io.ObjectOutputStream@4c257aef scala> oos.writeObject(iteblog) scala> val a = new A a: A = $iwC$$iwC$A@71687b10 scala> oos.writeObject(a) java.io.NotSerializableException: $iwC$$iwC$A
五、自動從scala.Product中繼承一些函數;
六、case class構造函數的參數是public級別的,咱們能夠直接訪問;es5
scala> iteblog.name res11: String = iteblog_hadoop
七、支持模式匹配;scala
scala> case class A( a: Int ) defined class A scala> case class B( b: String ) defined class B scala> def classMath( x: AnyRef ): Unit = { | x match { | case A(a) => println( "A:" + a ) | case B(b) => println( "B:" + b ) | case A => println( A.apply(100) ) | } | } classMath: (x: AnyRef)Unit scala> val a = A( 1 ) a: A = A(1) scala> val b = B( "b" ) b: B = B(b) scala> classMath( a ) A:1 scala> classMath( b ) B:b