println() 产生不同的输出
println() produces different output
fun main(args: Array<String>) {
var _array = arrayOf(1 , 2 , 3.14 , 'A', "item" , "a b c d", 4)
println("$_array[3]") // [Ljava.lang.Object;@1b6d3586[3]
println("${_array[3]}") // A
println(_array[3]) // A
println( _array[3] + " is _array's item") // ERROR
println( "" + _array[3] + " is _array's item") // A is _array's item
}
我很困惑为什么上面的代码会产生不同的输出
让我们一一破解:
println("$_array[3]")
与println("${_array}[3]")
相同-[3]在这里只是一个字符串,没有插值
println("${_array[3]}")
整个_array[3]
被插值
println(_array[3])
与println(_array[3].toString())
相同
println( _array[3] + " is _array's item") // ERROR
您的数组是 Array<Any>
。 plus()
没有为 (Any,String)
定义
println( "" + _array[3] + " is _array's item") // A is _array's item
plus()
是为 (String,Any) 对定义的,它 returns 一个字符串
println("$_array[3]") // [Ljava.lang.Object;@1b6d3586[3]
打印 _array
对象引用后跟 [3]
,您仅对 _array
参数使用字符串插值
println("${_array[3]}") // A
打印 _array
的第 4 个元素,您对 _array[3]
参数使用字符串插值
println(_array[3]) // A
打印_array
的第4个元素(同上)
println( _array[3].toString() + " is _array's item") // ERROR
它需要 toString()
才能打印出来,因为 _array
的元素是 Any
类型并且它后面的 + 符号是不确定的
它打印 _array
的第 4 个元素
println( "" + _array[3] + " is _array's item") // A is _array's item
它不需要 toString()
因为它前面有一个空字符串并且 + 号被编译器解释为字符串连接所以它打印 _array
[=26= 的第 4 个元素]
当您在字符串模板中使用复杂表达式时,您必须将其括在花括号中。但这对于单个变量是可选的。
所以,这一行
println("$_array[3]")
与
的含义相同
println(_array.toString() + "[3]")
fun main(args: Array<String>) {
var _array = arrayOf(1 , 2 , 3.14 , 'A', "item" , "a b c d", 4)
println("$_array[3]") // [Ljava.lang.Object;@1b6d3586[3]
println("${_array[3]}") // A
println(_array[3]) // A
println( _array[3] + " is _array's item") // ERROR
println( "" + _array[3] + " is _array's item") // A is _array's item
}
我很困惑为什么上面的代码会产生不同的输出
让我们一一破解:
println("$_array[3]")
与println("${_array}[3]")
相同-[3]在这里只是一个字符串,没有插值
println("${_array[3]}")
整个_array[3]
被插值
println(_array[3])
与println(_array[3].toString())
println( _array[3] + " is _array's item") // ERROR
您的数组是 Array<Any>
。 plus()
没有为 (Any,String)
println( "" + _array[3] + " is _array's item") // A is _array's item
plus()
是为 (String,Any) 对定义的,它 returns 一个字符串
println("$_array[3]") // [Ljava.lang.Object;@1b6d3586[3]
打印 _array
对象引用后跟 [3]
,您仅对 _array
参数使用字符串插值
println("${_array[3]}") // A
打印 _array
的第 4 个元素,您对 _array[3]
参数使用字符串插值
println(_array[3]) // A
打印_array
的第4个元素(同上)
println( _array[3].toString() + " is _array's item") // ERROR
它需要 toString()
才能打印出来,因为 _array
的元素是 Any
类型并且它后面的 + 符号是不确定的
它打印 _array
println( "" + _array[3] + " is _array's item") // A is _array's item
它不需要 toString()
因为它前面有一个空字符串并且 + 号被编译器解释为字符串连接所以它打印 _array
[=26= 的第 4 个元素]
当您在字符串模板中使用复杂表达式时,您必须将其括在花括号中。但这对于单个变量是可选的。
所以,这一行
println("$_array[3]")
与
的含义相同println(_array.toString() + "[3]")