ventajas tutorial desventajas java int kotlin

java - desventajas - kotlin tutorial



¿Los tipos de datos de Kotlin están basados ​​en tipos de datos Java primitivos o no primitivos? (2)

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 clase Integer lugar del tipo de datos en bruto.

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

  • Kotlin posiciona sus tipos numéricos ( Int , Long , Double , etc.) como no anidados el uno en el otro, no existe una relación entre estos tipos. 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 tipos. 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 compilan en primitivas JVM siempre que sea posible. Algunos usos requieren tipos 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 compilador decide si son necesarios para cada caso.

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

La forma más eficiente es usar 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 función cuando las usa. Se compilan 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 compilador 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)

Soy nuevo en Kotlin y estaba jugando con los tipos de datos. Tomé un tipo Int y luego intenté 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 clase 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 función .toDouble() , pero parece ineficaz e inmanejable.


Esto se debe a que Kotlin no funciona como Java en números cada vez mayores.

No hay conversiones ensanchadas implícitas para los números 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 objeto, no hay tipos 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()