首页 > 解决方案 > println() 产生不同的输出

问题描述

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

} 

我很困惑为什么上面的代码会产生不同的输出

标签: kotlinstring-interpolation

解决方案


println("$_array[3]")  // [Ljava.lang.Object;@1b6d3586[3]

打印_array后跟的对象引用[3],您仅对_array参数使用字符串插值

println("${_array[3]}") // A

打印 的第 4 个元素_array,您使用字符串插值作为_array[3]参数

println(_array[3]) // A

_array打印(同上)的第四个元素

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(),因为它前面有一个空字符串,并且 + 号被编译器解释为字符串连接,因此它打印第 4 个元素_array


推荐阅读