¿Cuál es la diferencia entre Int y Integer en Kotlin?

He intentado usar types Int e Integer en Kotlin. Aunque no veo ninguna diferencia. ¿Hay alguna diferencia entre los types Int e Integer en Kotlin? ¿O son los mismos?

Int es una class de Kotlin derivada de Number . Ver doc

[Int] Representa un integer con signo de 32 bits. En la JVM, los valores no anulables de este tipo se representan como valores del tipo primitivo int.

Integer es una class de Java.

Si searcha las especificaciones de Kotlin para "Entero", no hay ningún tipo de Integer Kotlin.

Si usa la expresión is Integer en IntelliJ, el IDE advierte …

Este tipo no se debe usar en Kotlin, use Int en su lugar.

Integer interactuará bien con Kotlin Int, pero tienen algunas diferencias sutiles en el comportamiento, por ejemplo:

 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 

En Java, hay momentos en los que necesita "encapsular" explícitamente un número integer como un object. En Kotlin solo los integers Nullable ( Int? ) Están encasillados. Intentando explícitamente encajonar un integer no nulable dará un error de compilation:

 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?) 

Pero Int e Integer ( java.lang.Integer ) se tratarán igual la mayor parte del time.

 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" 

Solo echa un vistazo a https://kotlinlang.org/docs/reference/basic-types.html#representation

En la plataforma Java, los numbers se almacenan físicamente como types de primitiva JVM, a less que necesitemos una reference numérica con nulos (por ejemplo, Int?) O generics. En los últimos casos, los numbers están encasillados.

Eso significa que Int se representa como primitiva int . Solo en los casos en que se trata de nulabilidad o generics, se debe utilizar el Integer tipo Wrapper de respaldo. Si usa Integer desde el principio, siempre trabaja con el tipo de envoltura y nunca con la primitiva int .

A Int es un tipo primitivo. Esto es equivalente a JVM int.

¿Un int Int? anulable Int? es un tipo en caja. Esto es equivalente a java.lang.Integer .

  • Cómo livedata envía los datos a la actividad si hay algún cambio
  • Manera más limpia de reasignar el valor de la variable cuando la condición se cumple en Kotlin
  • Kotlin: syntax adecuada "si el elemento no está en la list"
  • Accediendo a las vistas de la actividad con Anko
  • Acceder a las funciones de extensión de Kotlin desde Java
  • Cancelar la tarea reemplazada en ThreadPool en Java / Kotlin
  • Generar diagtwig de class de Kotlin
  • ¿Cuál es el `it` en el cuerpo de Kotlin lambda?
  • Conserva ViewModels con el scope del fragment mientras gira la pantalla
  • Regex: un metacarácter para reconocer cualquier tipo de personaje
  • Regreso de forEachLine