This question already has an answer here:
kotlin int boxed identity
(1个答案)
2年前关闭。
我是 Kotlin 的初学者。
我不明白下面的输出。
结果是
为什么两个输出不同?
我的Kotlin版本是1.2.31
代码编译成什么
为什么valueOf不一致
为此,我们需要查看valueOf的JavaDoc:
如您所见,对于较小的值,它将在两个调用中返回相同的对象,因此它们是相等的;对于较大的未缓存的值,两个对象是不同的
在Java中,==检查对象是否相等,因此2个相等的对象为false,而同一对象的2个副本返回true。
(1个答案)
2年前关闭。
我是 Kotlin 的初学者。
我不明白下面的输出。
@Test
fun testNumberBoxing() {
val a:Int = 1000
val boxedA1: Int? = a
val boxedA2: Int? = a
println("first check = ${boxedA1 === boxedA2}")
val b: Int = 2
val boxedB1: Int? = b
val boxedB2: Int? = b
println("second check = ${boxedB1 === boxedB2}")
}
结果是
first check = true
second check = false
为什么两个输出不同?
我的Kotlin版本是1.2.31
org.jetbrains.kotlin:kotlin-stdlib-jre7:1.2.31
最佳答案
我得到的输出
first check = false
second check = true
代码编译成什么
public static final void main(@NotNull String[] args) {
Intrinsics.checkParameterIsNotNull(args, "args");
int a = 1000;
Integer boxedA1 = Integer.valueOf(a);
Integer boxedA2 = Integer.valueOf(a);
String var4 = "first check = " + (boxedA1 == boxedA2);
System.out.println(var4);
int b = 2;
Integer boxedB1 = Integer.valueOf(b);
Integer boxedB2 = Integer.valueOf(b);
String var7 = "second check = " + (boxedB1 == boxedB2);
System.out.println(var7);
}
为什么valueOf不一致
为此,我们需要查看valueOf的JavaDoc:
如您所见,对于较小的值,它将在两个调用中返回相同的对象,因此它们是相等的;对于较大的未缓存的值,两个对象是不同的
在Java中,==检查对象是否相等,因此2个相等的对象为false,而同一对象的2个副本返回true。
关于kotlin - Kotlin号码拳击测试很奇怪,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49738117/
10-15 22:04