2010-12-08 22 views
11

último examen que tenía el ejercicio para determinar la salida del siguiente código:Conversión de tipo de int y la cadena, java

System.out.println(2 + 3 + ">=" + 1 + 1); 

Mi respuesta fue 5 >= 2 pero ahora me doy cuenta de que esta es la respuesta equivocada. Debe ser 5 >= 11. ¿Pero por qué?

+0

Eso no es código Java válido. Corrija el error de sintaxis. – cdhowie

+0

lo siento, actualizado :) –

+2

No estoy seguro, pero creo que puede tener que ver con el hecho de que cambiaste a una cadena en medio de la impresión. 2 + 3 tratará como un entero, pero una vez que toques el "> =" creo que pasa a considerar el resto de la línea como una cadena.así que si tomas la cadena "> =" más la cadena "1" y "1", obtienes> = 11. De nuevo, no estoy seguro de esto, pero parece tener sentido. – guildsbounty

Respuesta

17

Suponiendo que su sintaxis es: se evalúan

System.out.println(2 + 3 + ">=" + 1 + 1); 

expresiones de izquierda a derecha, en este caso 2 + 3 obtener resume a 5 y cuando "añadido" a consecuencia cadena en "5 >=", que cuando se añade a 1 da "5 >= 1", agregue otro 1 y su resultado es: "5 >= 11"

+2

¿Llamamos a eso precedencia? –

+2

+1, pero "agregar" cadenas se llama ** concatenación **. –

+0

sí! una de esas cosas que no puede recordar cuando realmente necesita: p –

1

Se evalúa de izquierda a derecha. Concatenas "1" a "5 >=" y finalmente "1" a "5 >= 1".

3
Number+number=number 
number+string=string 
string+number=string 
etc. 
11

Porque "agregar" una cadena a algo da como resultado la concatenación. Así es cómo se evalúa en la fase de compilación:

((((2 + 3) + ">=") + 1) + 1) 

El compilador hará plegado constante, por lo que el compilador puede reducir realmente la expresión de una pieza a la vez, y suplente en una expresión constante. Sin embargo, incluso si no hiciera esto, la ruta del tiempo de ejecución sería efectivamente la misma. Así que aquí van:

((((2 + 3) + ">=") + 1) + 1) // original 
(((5 + ">=") + 1) + 1)  // step 1: addition  (int + int) 
(("5>=" + 1) + 1)   // step 2: concatenation (int + String) 
("5>=1" + 1)     // step 3: concatenation (String + int) 
"5>=11"      // step 4: concatenation (String + int) 

Puede forzar Además entero por seccionar la segunda expresión numérica además con paréntesis. Por ejemplo:

System.out.println(2 + 3 + ">=" + 1 + 1); // "5>=11" 
System.out.println(2 + 3 + ">=" + (1 + 1)); // "5>=2" 
+0

+1 para mostrar la agrupación implícita –

1

Leámoslo una ficha a la vez, de izquierda a derecha:

El primer literal encontrado es un entero, 2, a continuación, un +, luego otro número entero, 3. Se agrega + entre dos enteros, por lo que se suman para ser 5.

Ahora tenemos 5, un número entero, luego un +, luego un String ">=". Un + entre un entero y una Cadena es un operador de concatenación. Entonces las cadenas se combinan para formar "5>=".

Luego tenemos "5>=", una Cadena, un +, y luego un número entero, 1. Esta es la concatenación de cadenas nuevamente. Entonces el resultado es "5>=1".

Finalmente tenemos "5>=1", una Cadena, un +, y la a 1. el suyo es Cadena concatenación de nuevo. Entonces el resultado es "5>=11".

Cuestiones relacionadas