我从kotlin语言开始
fun main (args:Array<String>){
var flag1:Boolean= true //Explicit declaration
var flag2: =false //Implicit declaration
println(flag2 + "and " + flag1)
println(flag1)
println(flag2)
}
在上面的代码中我声明了2种类型的布尔显式和隐式声明
对于上面的代码我会说预计会有以下输出: -
false and true
true
false
任何人都可以解释我哪里出错了吗?
答案 0 :(得分:4)
对于该编译器错误,请更改此:
println(flag2 + "and " + flag1)
到此:
println("$flag2 and $flag1")
Kotlin是强类型语言,你不能在String和Boolean类型上使用加号运算符。
但你可以使用字符串插值,在字符串文字中使用$运算符。
您还可以通过添加以下内容使其在布尔类型上使用重载加运算符进行编译:
operator fun Boolean.plus(s: String): String {
return this.toString() + s
}
答案 1 :(得分:3)
在Java中,当您将字符串与任何类型的对象连接时,它会执行string conversion。例如,
System.out.println(true + " and false"); //Output: true and false
在Kotlin中,字符串转换并不存在。或者,您可以使用string templates。
println("$flag2 and $flag1")
此外,由于Kotlin的String类提供了plus(Any?)
函数,它接收任何类型作为参数,因此以下代码行仍然有效:
println("$flag2 and " + flag1)
此设计中有discussion。