var count = 0
repeat(4) {
Log.i("ABCD", "见鬼了")
count++
}
Log.i("ABCD", "count = $count")
输出日志如下:
见鬼了
见鬼了
count = 4
循环已经走了4次了,但是只打印了两次“见鬼了”,我猜,是不是内容一样的时候只打印两次啊?那我运行这样的代码:
Log.i("ABCD", "见鬼了")
Log.i("ABCD", "见鬼了")
Log.i("ABCD", "见鬼了")
Log.i("ABCD", "见鬼了")
输出如下:
见鬼了
见鬼了
还真的是这样的,在AndroidStudio真恶心,搞这种Bug,最开始发现这个问题的时候是我在打印一些数组值的时候,当时真的以为见鬼了,以为是Kotlin语言出问题了,但是怎么想也不对啊,Kotlin这么强大,怎么出这么低级的错误呢。
这个Bug在需要打印数组时问题还是挺大的,如果数组元素值一样,会导致输出结果变少,如下:
val bytes = byteArrayOf(3, 3, 3, 3, 4)
bytes.forEach { byte -> Log.i("ABCD", "byte = $byte")}
输出结果如下:
byte = 3
byte = 3
byte = 4
这在调试的时候,如果不知道原因,真的搞死人啊,怎么也找不到什么时候数组中少了两个元素的原因,其实元素没少,只是打印少了,解决这个问题只能是让每次输出的内容不一样,所以可以使用数组的索引,如下:
val bytes = byteArrayOf(3, 3, 3, 3, 4)
bytes.forEachIndexed { index, byte -> Log.i("ABCD", "byte[$index] = $byte") }
输出如下:
byte[0] = 3
byte[1] = 3
byte[2] = 3
byte[3] = 3
byte[4] = 4