Rompecabezas del operador ternario de Java

Encuentre la salida del programa.

public class GFG {
    public static void main(String[] args) {
    char x = 'X';
    int i = 0;
    System.out.print(true ? x : 0);
    System.out.print(false ? i : x);
    }
}

Solución:
si ejecuta el programa, encontrará que imprime X88 . La primera declaración de impresión imprime X y la segunda imprime 88.

Las reglas para determinar el tipo de resultado de una expresión condicional son demasiado largas y complejas para reproducirlas en su totalidad, pero aquí hay tres puntos clave.

  1. Si los operandos segundo y tercero tienen el mismo tipo, ese es el tipo de la expresión condicional. En otras palabras, puede evitar todo el lío evitando el cálculo de tipo mixto.
  2. Si uno de los operandos es de tipo T donde T es byte, short o char y el otro operando es una expresión constante de tipo int cuyo valor se puede representar en tipo T, el tipo de la expresión condicional es T.
  3. De lo contrario, la promoción numérica binaria se aplica a los tipos de operandos y el tipo de la expresión condicional es el tipo promovido del segundo y tercer operandos.

Los puntos 2 y 3 son la clave de este rompecabezas. En las dos expresiones condicionales del programa, un operando es de tipo char y el otro es de tipo int. En ambas expresiones, el valor del operando int es 0, que se puede representar como un carácter. Sin embargo, sólo el operando int en la primera expresión es constante (0); el operando int en la segunda expresión es variable (i). Por lo tanto, el punto 2 se aplica a la primera expresión y su tipo de retorno es char. El punto 3 se aplica a la segunda expresión condicional y su tipo de devolución es el resultado de aplicar la promoción numérica binaria a int y char, que es int.

El tipo de expresión condicional determina qué sobrecarga del método de impresión se invoca. Para la primera expresión, se invoca PrintStream.print (char); para el segundo, PrintStream.print(int). La primera sobrecarga imprime el valor de la variable x como un carácter Unicode (X), mientras que la segunda lo imprime como un entero decimal (88).

Este artículo es una contribución de Shubham Juneja . Si le gusta GeeksforGeeks y le gustaría contribuir, también puede escribir un artículo usando contribuya.geeksforgeeks.org o envíe su artículo por correo a contribuya@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.

Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *