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
Kotlin:不兼容的类型:String和Int_Kotlin - Fatal编程技术网

Kotlin:不兼容的类型:String和Int

Kotlin:不兼容的类型:String和Int,kotlin,Kotlin,我尝试在Kotlin中编写此代码: fun main() { val number = 9 when (number) { is String -> println("Number is String") !is String -> println("Number is not String") } } 但是出现了一个错误:不兼容的类型:String和Int。 不应该出现“数字不是字符

我尝试在Kotlin中编写此代码:

fun main() {
    val number = 9

    when (number) {
        is String -> println("Number is String")
        !is String -> println("Number is not String")
    }
}
但是出现了一个错误:
不兼容的类型:String和Int

不应该出现“数字不是字符串”这样的词吗?

因为您的IDE已经知道数字是整数,所以IDE会告诉您它不兼容,请尝试此选项

fun main(any: Any){
    when (any){
        is String -> {}
        is Int -> {}
    }
}

不兼容类型:String和Int
不是程序打印的内容;这是一个编译器错误

数字不是字符串
是运行程序时显示的内容。但您无法运行它,因为它无法编译


它不编译的原因是因为编译器开发人员认为,试图检查
Int
是否是
字符串很可能是程序员的错误,所以最好先给你一个机会来修复它。

正如@lukman nudin提到的,
Koltin
将根据初始化值/类型自动转换变量类型,因此 语句
val number=9
相当于
val number:Int=9
,这意味着您严格地将其强制转换为
Int
,并尝试检查
String
的实例,它将失败,因此您需要显式地使用
Any

fun main() {
    val number:Any = 9
    when (number) {
        is String -> println("Number is String")
        else -> println("Number is not String")
    }
}
一个简单的例子:

if (9 is String) println("9 is a string")
9是字符串
永远不能是
true


is
操作符是一个运行时检查,用于检查对象的类型。但是在这里,编译器在编译时知道运行时检查是无用的,这意味着您可能犯了一个逻辑错误。

使用字符串数组以外的任何东西作为
main()
的参数有点奇怪。例如,这将阻止函数在IntelliJ中运行。