query namednativequery example create java casting jvm

namednativequery - Implementación de conversión de Java



native query example (4)

Sé cómo usar casting en Java pero tengo una pregunta más específica; ¿podría explicarme cómo funciona el casting (en memoria)?

  • ¿Cómo se modifica el tipo de variable en la transmisión ascendente y descendente?

  • ¿Cómo sabe la JVM que es seguro enviar este método a este objeto?

Gracias de antemano.


¿Podría explicarme cómo funciona el casting (en memoria)?

Funciona al nivel de código de bytes que realmente no está en la memoria

¿Cómo se cambia el tipo de variable en upcasting y downcasting?

Si es una primitiva con una instrucción especial de bytecode, por ejemplo de largo a entero como en:

long l = ... int i = ( int ) l;

El bytecode es: l2i si es una referencia con la instrucción checkcast

¿Cómo sabe la JVM que a partir de este momento es seguro enviar este método a este objeto?

No lo hace, intenta hacerlo en tiempo de ejecución y si falla arroja una excepción.

Es legal escribir:

String s = ( String ) new Date();




Todas las operaciones de fundición de primitivas se realizan en registros (como la mayoría de las operaciones). Para primitivas, en muchos casos, cuando se realiza el down-casting, se toman los bits más bajos y para el up-casting, el signo se extiende. Hay casos límite, pero generalmente no necesita saber cuáles son.

upcasting / downcasting una referencia funciona igual ya que comprueba que el objeto real es una instancia del tipo al que se lanza. Puedes lanzar lo cual no es ni upcast ni down cast.

p.ej

Number n = 1; Comparable c = (Comparable) n; // Number and Comparable are unrelated. Serializable s = (Serializable) c; // Serializable and Comparable are unrelated.