Kotlin中Int和Integer有什么区别?

mbjcgjjk  于 2023-05-18  发布在  Kotlin
关注(0)|答案(3)|浏览(208)

我尝试在Kotlin中使用Int和Integer类型。虽然我看不出有什么不同。Kotlin中Int和Integer类型有什么区别吗?或者它们是一样的?

vh0rcniy

vh0rcniy1#

Int是从Number派生的Kotlin类。见文档
[Int]表示32位有符号整数。在JVM上,这种类型的不可空值表示为原始类型int的值。
Integer是一个Java类。
如果你要在Kotlin规范中搜索“Integer”,则没有Kotlin Integer类型。
如果在IntelliJ中使用表达式is Integer,IDE将警告...
此类型不应该在Kotlin中使用,而使用Int。
Integer将与KotlinInt很好地互操作,但它们在行为上确实存在一些细微的差异,例如:

val one: Integer = 1 // error: "The integer literal does not conform to the expected type Integer"
val two: Integer = Integer(2) // compiles
val three: Int = Int(3) // does not compile
val four: Int = 4 // compiles

在Java中,有时需要显式地将整数作为对象“装箱”。在Kotlin中,只有可为空的整数(Int?)被装箱。显式地尝试框化一个不可为空的整数将给予编译器错误:

val three: Int = Int(3) // error: "Cannot access '<init>': it is private in 'Int'
val four: Any = 4 // implicit boxing compiles (or is it really boxed?)

但是IntIntegerjava.lang.Integer)在大多数情况下会被相同地对待。

when(four) {
    is Int -> println("is Int")
    is Integer -> println("is Integer")
    else -> println("is other")
} //prints "is Int"
when(four) {
    is Integer -> println("is Integer")
    is Int -> println("is Int")
    else -> println("is other")
} //prints "is Integer"
4dbbbstv

4dbbbstv2#

Int是原始类型。这相当于JVM int。
可空的Int Int?是一个装箱类型。这相当于java.lang.Integer

2jcobegt

2jcobegt3#

请浏览https://kotlinlang.org/docs/reference/basic-types.html#representation
在Java平台上,数字在物理上存储为JVM基元类型,除非我们需要一个可为空的数字引用(例如Int?)或泛型都涉及。在后一种情况下,数字被加框。
这意味着Int表示为基元int。只有在涉及空性或泛型的情况下,才必须使用后备 Package 器类型Integer。如果你从一开始就使用Integer,你总是使用 Package 器类型,而不是原语int

相关问题