Este es error del compilador Java o declaración correcta?

user727062:

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?

barredora:

La diferencia entre una Stringy una chares significativa. algunos operadores numéricos, cuando se aplica en una char, convierte el charen un int(esto se llama promoción numérica unario ). Por otro lado, sólo el binario + operador se define por Strings.

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 intmedio 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 cSEPiban a ser reemplazados con sSEP:

strOut = "AA" + (+ sSEP) + "BB";

El compilador de Java no sabe lo que + sSEPsignifica. El +operador unitario no está definida para String!

Supongo que te gusta

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