首先,Int
将根据其上下文映射到java int
/Integer
。如果Int
是一个通用参数,则其映射类型为Integer
。否则,它是一个原始类型int
。例如:
val a:Int = 1
//final int a = 1; //mapped to java code
val numbers:List<Int> = asList(1,2,3)
//final List<Integer> numbers = asList(1, 2, 3); //mapped to java code
其次,拳击的Int
到Int?
是相同的行为的Java拳的int
到Integer
,例如:
val a:Int = 1 // int a = 1;
val b:Int? = a; // Integer b = a;
为什么盒装整数不一样?
这是因为在该范围[-128, 127]
Integer仅缓存值。上面的变量a
超出缓存范围,它会为每个装箱创建一个新的Integer实例,而不是使用缓存的值。例如:
// v--- 1 is in cache range
val ranged: Int = 1
val boxedRanged1: Int? = ranged
val boxedRanged2: Int? = ranged
println(boxedRanged1 === boxedRanged2) //true
// v--- 128 is out of cache range
val excluded: Int = 128
val boxedExcluded1: Int? = excluded
val boxedExcluded2: Int? = excluded
println(boxedExcluded1 === boxedExcluded2) //false
虽然我不是100%肯定,我认为'Int'是一样的Java类'int'(基本),而''诠释是一样的'整数'(对象) – danielspaniol
为什么倒票?用户明确表示,如果他/她认识错误,应引导他/她。我显然没有看到这个问题应该被投票的原因。 –
@danielspaniol也许我会让你失望[这里](https://stackoverflow.com/a/45144516/7607923),:) –