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())