为什么打印 IntArray 显示的是地址而不是数组的值?

Yon*_*dez 6 kotlin

我有点困惑为什么当我尝试打印如下所示的任何基本类型的数组时,它返回一个地址而不是数组中的实际值。

fun notInPlaceRevers(array : IntArray): IntArray{
  val arrayB = IntArray(5)

  for (i in 0 until array.size)
      array[i] =  array[(array.size -1)  - i]

  return arrayB
}



fun main(args: Array<String>) {
  val initialArray = intArrayOf(2,3,4,5,6)

  print("${notInPlaceRevers(initialArray)}")
}
Run Code Online (Sandbox Code Playgroud)

它打印出这个 --> [I@3834d63f

现在我已经测试过了,当我执行 foreach 循环时,它会打印出每个索引中的值,例如

for(element in initialArray)
  print("$element")
Run Code Online (Sandbox Code Playgroud)

这是否与 kotlin 与 java 类似,在将对象传递给函数时传递对象引用的副本有关。那么,当打印原始数组时,我会返回引用吗?

还有另一种更简单的方法来打印原始数组吗?

Jos*_*hua 4

它打印出这个 --> [I@3834d63f

它与 Kotlin 无关。这就是 Java 的工作原理。

这是否与 kotlin 与 java 类似,在将对象传递给函数时传递对象引用的副本有关。那么,当打印原始数组时,我会返回引用吗?

我假设您没有运行 Kotlin 本机或 Kotlin JS。它被编译为Java字节码并在JVM上运行。所以它遵循Java的规则。

还有另一种更简单的方法来打印原始数组吗?参见Mon Vrai Nom 的回答

但是,我建议您List改为使用。直接使用数组并没有什么真正的好处,就像ArrayList在 Java 中使用数组一样。不仅你有固定的大小List,你还有更多的扩展方法。

这是一个例子。

fun notInPlaceRevers(list : List<Int>): List<Int> {
    return list.mapIndexed { i , _ -> list.size - 1 - i }
}

fun main(args: Array<String>) {
    val initialList = listOf(2, 3, 4, 5, 6)
    print("${notInPlaceRevers(initialList)}")
}
Run Code Online (Sandbox Code Playgroud)

它打印

[4, 3, 2, 1, 0]
Run Code Online (Sandbox Code Playgroud)