es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Dónde y cómo se realizan realmente las conversiones de referencia amplias?

En la especificación de lenguaje de Java (JLS), dice lo siguiente:

Una conversión de tipo de Thread a tipo Object no requiere ninguna acción en tiempo de ejecución; Thread es una subclase de Object, por lo que cualquier referencia producida por una expresión de tipo Thread es un valor de referencia válido de tipo Object.

He escrito un ejemplo como se muestra a continuación:

Thread myThread = new Thread();
Object myObject = myThread;

Según mi entendimiento, una conversión significa que un tipo se convierte realmente en otro tipo. ¿Cuál de los siguientes argumentos es correcto?

1.

El compilador inserta implícitamente una conversión ascendente en tiempo de compilación. En tiempo de ejecución, la conversión de Thread a Object se lleva a cabo, por lo que ambos tipos de los dos operandos del operador = son de tipo Object.

2.

El compilador inserta implícitamente una conversión de identidad en tiempo de compilación. En tiempo de ejecución, la conversión de Thread a Thread se lleva a cabo, aunque los tipos de los dos operandos del operador = no son iguales, son compatibles entre sí.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Basándose en la información proporcionada en el JLS, el argumento correcto es la opción 1: el compilador inserta implícitamente un “up-cast” en tiempo de compilación. En tiempo de ejecución, la conversión de Thread a Object se lleva a cabo, por lo que ambos tipos de los dos operandos del operador = son de tipo Object. Esto se debe a que una conversión de tipo Thread a tipo Object no requiere ninguna acción en tiempo de ejecución porque Thread es una subclase de Object. Por lo tanto, la referencia producida por una expresión de tipo Thread se puede asignar directamente a una variable de tipo Object.

Comments are closed.