¿Los types de datos de Kotlin están basados ​​en types de datos Java primitivos o no primitivos?

Soy nuevo en Kotlin y estaba jugando con los types de datos. Tomé un tipo Int y luego traté de convertirlo en un Double al decir num as Double , una llamada que es válida en java (no sintácticamente, pero obtienes el punto). Sin embargo, esto falló, diciendo que Int no se puede convertir a Doble. Estoy asumiendo que esto se debe a que se basa en la class Integer en lugar del tipo de datos en bruto. ¿Estoy en lo correcto y cuál es la forma más eficiente de emitir valores? Hay una function .toDouble() , pero parece ineficaz e inmanejable.

Tomé un tipo Int y luego intenté convertirlo en un Double diciendo num as Double <…> Sin embargo, esto falló, diciendo que Int no se puede convertir a Double . Estoy asumiendo que esto se debe a que se basa en la class Integer lugar del tipo de datos en bruto.

No, y hay dos puntos importantes a tener en count:

  • Kotlin posiciona sus types numéricos ( Int , Long , Double , etc.) como no nesteds el uno en el otro, no existe una relación entre estos types. Es por eso que el elenco intNum as Double no tiene éxito en Kotlin. Es por eso que no hay conversiones implícitas entre estos types. En cambio, la conversión numérica se realiza con las funciones correspondientes (por ejemplo, .toDouble() )

  • Los usos de tipo numérico en Kotlin se comstackn en primitivas JVM siempre que sea posible. Algunos usos requieren types de cajas (por ejemplo, un Nullable Int? Requiere el boxeo, y lo mismo ocurre con una implementación de tipo genérico con un Int como argumento de tipo), pero el comstackdor decide si son necesarios para cada caso.

<…> ¿Cuál es la forma más eficiente de emitir valores? Hay una function .toDouble() , pero parece ineficaz e inmanejable.

La forma más eficiente es utilizar las funciones de conversión numérica como .toDouble() . De hecho, estas funciones están intrínsecas y no hay una sobrecarga de llamada de function cuando las usa. Se comstackn estrechamente con lo que javac produciría para un molde numérico de Java o una conversión implícita. Puede inspeccionar el código de bytes que el comstackdor de Kotlin produce para descubrir qué es lo que está debajo del capó y si una conversión específica introduce alguna sobrecarga.

Ver también: una respuesta a una pregunta similar, (enlace)

Esto se debe a que Kotlin no funciona como Java en numbers cada vez mayores.

No hay conversiones ensanchadas implícitas para los numbers en Kotlin. por ejemplo, puede escribir algo en Java de la siguiente manera:

 int a = 1; double b = a; 

Sin embargo, no puedes escribir algo en Kotlin. por ejemplo:

 val a:Int = 1 // v--- can't be widening val b:Double = a 

Esto se debe a que todo en Kotlin es un object, no hay types primitivos, por lo que debe convertir un Int en un Double explícitamente, por ejemplo:

 val a:Int = 1 // v--- convert it explicitly by `toDouble()` method val b:Double = a.toDouble() 
  • Obtener una reference a una function de Kotlin como método Java
  • Función rxjava :: zip devuelve un resultado vacío
  • Analizando json con API remota rota
  • Cuenta el número de dígitos en Kotlin
  • ¿Por qué Kotlin con Spring MVC JSON devuelve un object vacío?
  • Cómo probar el observador?
  • ¿Cómo obtengo la finalización del código IntelliJ IDEA para importar methods estáticos de Java como funciones de nivel superior de Kotlin?
  • Acuerdo de Corda - Algoritmo de fase del plan
  • Dos funciones con diferente número de parameters de tipo en Kotlin
  • Error al intentar crear una instancia de una class Kotlin de Java
  • Kotlin-allopen para android