Android之路

导航

针对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编辑  收藏  举报