Kotlin 运算符'的不同结果===';以不同的值';名称';介于两个值之间

Kotlin 运算符'的不同结果===';以不同的值';名称';介于两个值之间,kotlin,syntax,Kotlin,Syntax,当我将我的代码与另一个用户的代码进行比较时,会产生不同的结果。 () 我用的是intellij //This is my code val a: Int = 1 val b: Int? = a val c: Int? = a println(b===c) //true //This is another user's one val a: Int = 10000 val boxedA: Int? = a val anotherBoxedA: Int? = a print(boxedA ===

当我将我的代码与另一个用户的代码进行比较时,会产生不同的结果。 ()

我用的是intellij

//This is my code
val a: Int = 1
val b: Int? = a
val c: Int? = a
println(b===c) //true

//This is another user's one
val a: Int = 10000
val boxedA: Int? = a
val anotherBoxedA: Int? = a
print(boxedA === anotherBoxedA) //false

我不明白为什么会发生这种情况。

假设您在JVM上运行代码,会发生以下情况:

  • Int?
    转换为
    java.lang.Integer
    Int
    转换为原语
    Int
    类型

  • val-boxedA:Int?=a
    变成
    val-boxedA:Integer=Integer.valueOf(a)
    。(
    Integer.valueOf
    int
    s的装箱方式)

  • Integer.valueOf的文档:

    此方法将始终缓存-128到127(含)范围内的值,并且可能缓存此范围之外的其他值

  • 因此1被缓存,对
    Integer.valueOf(1)
    的多次调用返回相同的
    Integer
    ;10000不会(默认情况下)


    但实际上,
    ==
    很少有用。

    哇,我从来没有想过这个数字!谢谢你的详细解释