kotlin - 数字类型的自动转换

dam*_*hat 2 type-conversion implicit-conversion kotlin

在java中,我们可以赋值intdouble,例如double x = 123

在 kotlin 中,我们得到了一个编译错误。

问题:我们可以在 中启用自动转换功能kotlin吗?为什么kotlin默认没有这个功能?

var x: Double = 123; // ERROR
Run Code Online (Sandbox Code Playgroud)

再举一个例子:

fun foo(x: Double) { }

fun main(args: Array<String>) {
   foo(123.0);  // OK 
   foo(123);    // ERROR
}
Run Code Online (Sandbox Code Playgroud)

更新:

文字123可以在编译时自动转换为ShortLong。但它不会转换为FloatDouble

fun fooShort(x: Short) {}
fun fooInt(x: Int)     {}
fun fooLong(x: Long)   {}


fun main(args: Array<String>) {
    fooShort(123)  // OK
    fooInt(123)    // OK
    fooLong(123)   // OK
}
Run Code Online (Sandbox Code Playgroud)

nay*_*yem 5

不,这不会发生。由于kotlin是强类型的意思类型没有隐含裹挟。您需要显式类型转换。从用于显式转换的 Kotlin 参考中可以看出:

由于不同的表示,较小的类型不是较大类型的子类型。[...] 因此,较小的类型不会隐式转换为较大的类型。[...] 我们可以使用显式转换来扩大数字。