Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kotlin 为什么打印IntArray时显示的是地址而不是数组的值?_Kotlin - Fatal编程技术网

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

Kotlin 为什么打印IntArray时显示的是地址而不是数组的值?,kotlin,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&

我有点困惑,为什么当我试图打印出任何基元类型的数组(如下图)时,它会返回一个地址而不是数组中的实际值

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)}")
}
这是否与kotlin与java的相似之处有关,在将对象传递给函数时,kotlin传递对象引用的副本。所以当打印一个基元数组时,我得到了引用

还有没有其他更简单的方法来打印基元数组

import java.util.Arrays
import java.util.Arrays

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

    println(Arrays.toString(array))
}
趣味主线(args:Array){ val数组=intArrayOf(1,2,3,4,5) println(数组.toString(数组)) }
浏览时发现此项

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

它与Kotlin无关,Java就是这样工作的

这是否与kotlin与java的相似之处有关,在向函数传递对象时,kotlin会传递对象引用的副本。因此,在打印基元数组时,我会返回引用

我假设您没有运行Kotlin native或Kotlin JS。它被编译成Java字节码并在JVM上运行。因此它遵循Java的规则

还有没有其他更简单的方法来打印基元数组? 看

但是,我建议您改用
List
。直接使用数组的实际好处很小,就像您在Java中改用
ArrayList
一样。您不仅在
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)}")
}
这是否与kotlin与java的相似之处有关,在向函数传递对象时,kotlin会传递对象引用的副本。因此,在打印基元数组时,我会返回引用

它与JVM平台相关,但与您描述的方式不同

Kotlin将数组实现为Java数组。数组是一个对象,因此它具有
toString()
方法。您看到的是
toString
的默认实现的输出,该默认实现存在于
对象
类中:

public String toString() {
    return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
[I
是特殊的
int[]
类的名称,
@
之后的内容只是
hashCode()的返回值
以十六进制表示。巧合的是,它是从最初分配此对象的地址派生而来的。对象的地址可能会随着每个GC周期而更改,但其
hashCode()
永远不会更改,因为这样会中断

还有没有其他更简单的方法来打印基元数组

是。Kotlin定义了扩展函数:


这同样有效。只需将它们转换为列表即可

print(notInPlaceRevers(initialArray).toList())

thanx一吨,这一切都很有意义。欣赏细节。
public String toString() {
    return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
val array = arrayOf("apples", "oranges", "lime")
println(array.contentToString()) // [apples, oranges, lime]
print(notInPlaceRevers(initialArray).toList())