Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Type conversion kotlin-数字类型的自动转换_Type Conversion_Kotlin_Implicit Conversion - Fatal编程技术网

Type conversion kotlin-数字类型的自动转换

Type conversion kotlin-数字类型的自动转换,type-conversion,kotlin,implicit-conversion,Type Conversion,Kotlin,Implicit Conversion,在java中,我们可以将int分配给double,例如double x=123 在kotlin中,我们得到一个编译错误 问题:我们能否在kotlin中启用自动转换功能?为什么默认情况下,kotlin没有此功能 var x: Double = 123; // ERROR 还有一个例子: fun foo(x: Double) { } fun main(args: Array<String>) { foo(123.0); // OK foo(123); // ER

在java中,我们可以将
int
分配给
double
,例如
double x=123

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

问题:我们能否在
kotlin
中启用自动转换功能?为什么默认情况下,
kotlin
没有此功能

var x: Double = 123; // ERROR
还有一个例子:

fun foo(x: Double) { }

fun main(args: Array<String>) {
   foo(123.0);  // OK 
   foo(123);    // ERROR
}

不,这不会发生的。由于
kotlin
是强类型的,这意味着类型不会被隐式强制。您需要显式类型转换。根据Kotlin的参考资料,其规定:

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


科特林想知道你是有意还是无意的。如果它允许隐式转换,那么我们永远不会知道,编译器也帮不上忙。隐式转换在统计上被证明是大量的bug、神秘bug和邪恶bug。Kotlin不允许这样做,因为它希望开发人员陈述意图,而不是猜测意图。没有计划改变这一点。在Java中,您不会将
int
赋值给
double
,而是先进行加宽,然后再赋值。你可以阅读关于可能发生的一切的不那么简单的解释:
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
}