Hace unos días, hice un error en el código de Java, pero compilado y funcionaba bien. (Aunque el resultado es extraño.)
Mi código es:
public static void main(String args[]) {
String strOut;
char cSEP = '|';
String sSEP = "|";
strOut = "AA" + cSEP + "BB"; // Correct assignment
System.out.println(strOut); // The result is "AA|BB". This is OK.
strOut = "AA" + + cSEP + "BB"; // No Error : no token between two +
System.out.println(strOut); // The result is "AA124BB"
strOut = "AA" + + sSEP + "BB"; // This is compiler error !!!
System.out.println(strOut);
}
No puedo encontrar la razón por la segunda asignación no es error y 124 se imprime. (Por supuesto, '|' es 124 en código ASCII Pero por qué "124", no. "|"?)
¿Es este error del compilador? O la sintaxis de Java correcto que yo no sabía todavía?
La diferencia entre una String
y una char
es significativa. algunos operadores numéricos, cuando se aplica en una char
, convierte el char
en un int
(esto se llama promoción numérica unario ). Por otro lado, sólo el binario +
operador se define por String
s.
En la segunda y tercera línea de su código, la expresión se analiza como sigue:
strOut = "AA" + (+ cSEP) + "BB";
El unario +
operador, cuando se aplica en una char
, se vuelve toda la expresión en un int
medio promoción numérica unario. El valor es igual al valor codificado del personaje. Así, la expresión se convierte en:
strOut = "AA" + 124 + "BB";
que es válida.
Pero si cSEP
iban a ser reemplazados con sSEP
:
strOut = "AA" + (+ sSEP) + "BB";
El compilador de Java no sabe lo que + sSEP
significa. El +
operador unitario no está definida para String
!