我需要知道为什么? 如果我把这行改为“println(name + two)”错误解决?

fun main(args:Array<String>){ val two=2 val name:String? name="Mensh" println(two+name) } 

这是一个简单的kotlin应用程序,我得到了println(two+name)的错误:

 Error:(8, 16) Kotlin: None of the following functions can be called with the arguments supplied: public final operator fun plus(other: Byte): Int defined in kotlin.Int public final operator fun plus(other: Double): Double defined in kotlin.Int public final operator fun plus(other: Float): Float defined in kotlin.Int public final operator fun plus(other: Int): Int defined in kotlin.Int public final operator fun plus(other: Long): Long defined in kotlin.Int public final operator fun plus(other: Short): Int defined in kotlin.Int 

这在Kotlin中不能编译的原因是因为在连接时没有将数字隐式转换为字符串,这与Java不同。

例如,这将编译:

 fun main(args:Array<String>) { val two = 2 val name = "Mensh" println(two.toString() + name) } 

正如其他人所说,字符串模板将是一个更习惯于这样做的方式。

其他答案给你的解决方案,但不是解释你的错误。

 Error:(8, 16) Kotlin: None of the following functions can be called with the arguments supplied: public final operator fun plus(other: Byte): Int defined in kotlin.Int public final operator fun plus(other: Double): Double defined in kotlin.Int public final operator fun plus(other: Float): Float defined in kotlin.Int public final operator fun plus(other: Int): Int defined in kotlin.Int public final operator fun plus(other: Long): Long defined in kotlin.Int public final operator fun plus(other: Short): Int defined in kotlin.Int 

Kotlin有+运算符的运算符重载 。

println(two+name) :这里的编译器试图使用Int运算符的重载函数,它有一个String参数,但是没有这个函数。 因此,你会得到上述错误。 你可以在上面的错误中看到所有加上运算符重载的函数。

println(name+two) :但是String有一个加运算符重载函数,它接受Any? 参数。 所以你没有得到任何错误。 这是字符串的加运算符重载函数:

 public operator fun plus(other: Any?): String 

Kotlin有自己的格式化字符串的风格,试试:

 println("$two$name") 

在Kotlin中,可以使用字符串模板进行连接:

 val c = "$two $name" print(c) 

其他信息在这里。