针对Kotlin教程中的Int比较数据的错误
最近在学习Kotlin,就以官方教程为学习,在学习过程中,出现了这样的错误,或者坑。到网上查询,也发现他家都发现了这个坑,在此仅作记录。
学习Kotlin的数据类型,里面有一段关于两个数字进行比较的介绍,具体如下:
【在 Kotlin 中,三个等号 === 表示比较对象地址,两个 == 表示比较两个值大小。】
1 fun main(args: Array<String>) { 2 val a: Int = 10000 3 println(a === a) // true,值相等,对象地址相等 4 5 //经过了装箱,创建了两个不同的对象 6 val boxedA: Int? = a 7 val anotherBoxedA: Int? = a 8 9 //虽然经过了装箱,但是值是相等的,都是10000 10 println(boxedA === anotherBoxedA) // false,值相等,对象地址不一样 11 println(boxedA == anotherBoxedA) // true,值相等 12 }
这段代码并没有错,但是容易产生误解,当把上述变量定义为
val a:Int = 127
就会发现,上述结果的第10行,也是true。
这个与Java中Integer的自动拆装箱是一致的,Java会对在[-128,127]范围内的Integer对象进行缓存,也就是说当创建在此范围内的Integer对象时,若缓存中存在,则不会创建新的对象,即此范围内的值相等的Integer对象,比较引用地址时,是相同的。
所以说,官方这点非常坑,很多东西还是要自己多测试,多思考!
posted on 2019-08-14 14:25 Android之路 阅读(1860) 评论(0) 编辑 收藏 举报