为什么IntArray上的toString将地址添加到Kotlin中的列表中?

时间:2019-03-03 04:23:14

标签: kotlin

我刚开始和Kotlin一起玩,并且正在为Kotlin进行Udacity训练营课程。

我要解决以下问题陈述:

  1. 创建一个称为11到15的数字的整数数组。
  2. 为字符串创建一个空的可变列表。
  3. 编写一个for循环,该循环遍历数组并将每个数字的字符串表示形式添加到列表中。
  4. 另外可以看到正确添加了编号(打印出列表的内容)。

代码:

var numbers : IntArray = intArrayOf(11, 12, 13, 14, 15)
var strList : MutableList<String> = mutableListOf<String>()

println("Now adding nos to strList")
for (number in numbers) {
    strList.add(numbers.toString())
}

println(strList)

奇怪的部分是我看到如下结果:

Now adding nos to strList
[[I@3bc04539, [I@3bc04539, [I@3bc04539, [I@3bc04539, [I@3bc04539]

我知道这听起来很简单,但是Kotlin为什么要打印对no而不是实际数字本身的引用?

3 个答案:

答案 0 :(得分:3)

我认为这里的真正问题是您的电话:

Scaffold(
        ...
        resizeToAvoidBottomPadding: false,
        ...
}

应该是:

strList.add(numbers.toString())

照原样,它每次都尝试打印整个数组。而且由于IntArray本身似乎并没有实现strList.add(number.toString()) ,因此您在toString()中获得了默认值,这是唯一的,但不是很有帮助。

答案 1 :(得分:0)

尝试使用contentToString而不是toString:

strList.add(numbers.contentToString())

这将导致:

[[11, 12, 13, 14, 15], [11, 12, 13, 14, 15], [11, 12, 13, 14, 15], [11, 12, 13, 14, 15], [11, 12, 13, 14, 15]]

答案 2 :(得分:0)

谢谢。

该错误是一个愚蠢的错字,其中我每次都在添加number而不是@gidds纠正过的numbers。根据Java逻辑,将一个列表添加到集合会导致一个mem地址,而不是user2864740指出的内容的内省。谢谢大家的帮助。

已解决。