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
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
9
se encajona a Integer
y después el tipo común entre eso y String
se encuentra. Así que en realidad se está llamando a la println(Object)
sobrecarga no println(String)
o println(int)
. println(Object)
llama toString
en 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.