Java operador ternario de conversión de tipo de datos basado en el primer valor?

Naveen Kumar:

Me encontré con esto que no he visto antes.

Aquí es una expresión normal

    int a = 5;
                  System.out.println(((a < 5) ? 0 : 9));

por lo que este se limita a imprimir 9 como un int. Ahora Si pongo la primera cadena de valor en lugar de un int 0

    int a = 5;
                  System.out.println(((a < 5) ? "asd" : 9));

Aquí el valor 9 se imprime como una cadena y no como un int. Para confirmar esto sólo tratar de añadir esto con otro número entero

 int a = 5;
             System.out.println((((a < 5) ? 0 : 9) + 4)           );

Ahora bien, esto da como resultado 13, pero si cambia el primer valor de cadena en lugar de un int 0 da un error de compilación

"The operator + is undefined for the argument type(s) Object&Serializable&Comparable<?>, int". 

Estoy confundido con este error de compilación. Lo que es en realidad detrás de esto? Gracias por la explicación

Tom Hawtin - tackline:

El tipo de

(a < 5) ? "asd" : 9

es

Object&Serializable&Comparable<?>

Esto se puede ver en el error de compilación más adelante en la pregunta. El int 9se encajona a Integery después el tipo común entre eso y Stringse encuentra. Así que en realidad se está llamando a la println(Object)sobrecarga no println(String)o println(int). println(Object)llama toStringen su argumento.

Si se intenta aplicar +a un Object&Serializable&Comparable<?>entonces ni la concatenación de cadenas o aritmética es aplicable, por lo tanto el error del compilador.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=181402&siteId=1
Recomendado
Clasificación