Kotlin中Int和Integer有什么区别?

时间:2017-09-18 08:34:52

标签: kotlin

我尝试在Kotlin中使用Int和Integer类型。虽然我没有看到任何区别。 Kotlin中Int和Integer类型之间有区别吗?或者它们是否相同?

3 个答案:

答案 0 :(得分:19)

Int是源自Number的Kotlin类。 See doc

  

[Int]表示32位有符号整数。在JVM上,不可为空的值   此类型表示为基本类型int的值。

Integer是一个Java类。

如果您要搜索Kotlin规范中的“整数”,则没有Kotlin Integer类型。

如果在IntelliJ中使用表达式is Integer,则IDE会发出警告......

  

此类型不应在Kotlin中使用,而是使用Int。

Integer将与Kotlin Int很好地互操作,但它们在行为上确实存在一些细微差别,例如:

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中,只有Nullable整数(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"

答案 1 :(得分:6)

Int是原始类型。这相当于JVM int。

可以为空的Int Int?是一个盒装类型。这相当于java.lang.Integer

答案 2 :(得分:3)

只需查看https://kotlinlang.org/docs/reference/basic-types.html#representation

即可
  

在Java平台上,数字实际存储为JVM原语   类型,除非我们需要一个可以为空的数字引用(例如Int?)或   涉及泛型。在后一种情况下,数字是装箱的。

这意味着,Int表示为原始int。仅在涉及可空性或泛型的情况下,必须使用支持包装类型Integer。 如果从头开始使用Integer,则始终使用包装器类型,而不使用原始int