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]")