мой env:
Scala версии 2.9.1.final (Java HotSpot (TM) 64-разрядная серверная виртуальная машина, Java 1.6.0_26).
сначала посмотрите этот пример:
scala> var a = 1
a: Int = 1
scala> var c = 'c
c: Symbol = 'c
scala> var d = 1.1
d: Double = 1.1
scala> var b = "123"
b: java.lang.String = 123
scala> val e:String = "234"
e: String = 234
так что вы можете видеть другой литерал, кроме строки, тип по умолчанию - Scala Types (Int Double Symbol
.
но строковый литерал имеет тип Java. (java.lang.String
и когда вы определяете значение с типом scala String
, строковым литералом будет тип Scala String.
почему тип строкового литерала по умолчанию не Scala String?
Во-вторых:
когда вы должны вызывать метод scala из Java.
и ваш метод scala с параметром следующим образом:
def hello(i:Int) = {
println(i)
}
на стороне Java. если ты так позвонишь.
object.hello (нуль)
произойдет сбой при несовпадении типов.
java.lang.Integer
может быть нулевым. но scala Int
не может быть нулевым.
null в scala - это подтип AnyRef. не AnyVal ..
я обнаружил, что AnyRef и AnyVal ведут меня в мир java1.4, в котором нет автобокса ...