val a = 1 // this type gets inferred to be of type Int val b = "b" // this type in inferred to be a String val c = 2.0 // this type is inferred to be a Double case class SomeThing class SomeOtherThing val d = SomeThing // this type is instantiated as SomeThing. Not no need for the 'new' keyword as this is a case class val e = new SomeOtherThing // This type requires the new keyword as no factory method is created for non case classes