Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kotlin 为什么是科特林'===';对于相同的对象引用,引用相等运算符是否返回false?_Kotlin_Nullable_Equality_Boxing_Autoboxing - Fatal编程技术网

Kotlin 为什么是科特林'===';对于相同的对象引用,引用相等运算符是否返回false?

Kotlin 为什么是科特林'===';对于相同的对象引用,引用相等运算符是否返回false?,kotlin,nullable,equality,boxing,autoboxing,Kotlin,Nullable,Equality,Boxing,Autoboxing,示例来自Kotlin官方网站 val a: Int = 100 val boxedA: Int? = a val anotherBoxedA: Int? = a val b: Int = 100 val boxedB: Int? = b val anotherBoxedB: Int? = b println(a === a) // true println(boxedA === anotherBoxedA) // t

示例来自Kotlin官方网站

    val a: Int = 100
    val boxedA: Int? = a
    val anotherBoxedA: Int? = a     

    val b: Int = 100
    val boxedB: Int? = b
    val anotherBoxedB: Int? = b

    println(a === a)  // true
    println(boxedA === anotherBoxedA) // true
    println(boxedB === anotherBoxedB) // true
我理解上面的例子。 但当我将a和b的值从100更改为1000时,输出将从true更改为false,如下所示:

    val a: Int = 1000
    val boxedA: Int? = a
    val anotherBoxedA: Int? = a     
    
    val b: Int = 1000
    val boxedB: Int? = b
    val anotherBoxedB: Int? = b

    println(a === a)  // true
    println(boxedA === anotherBoxedA) // false
    println(boxedB === anotherBoxedB) // false
任何人都可以通过将值从100更改为1000来提供帮助,为什么=运算符的输出正在更改


自动装箱会发生什么情况?

自动装箱使用缓存处理小整数(我猜最多127个),因此,如果装箱一个小整数,会得到相同的对象,但如果装箱一个大整数,会得到不同的对象。

谢谢@DiegoMarin,这个链接帮助了我