2012-06-13 23 views

Respuesta

11

Use soportes de la siguiente manera

System.out.println((i+1) + " " + (j+1)); 

Desde el docs

El operador + es sintácticamente asociativo por la izquierda, no importa si se después se determina por análisis de tipo para representar la concatenación de cadenas o adición. En algunos casos se requiere cuidado para obtener el resultado deseado. Por ejemplo, la expresión:

a + b + c siempre es considerado en el sentido de: (a + b) + c

La extensión de este a su escenario

i+1 + " " + j+1 

se convierte en

(((i + 1) + " ") + j)+1 

Desde i es un int por lo (i + 1) = 1, simple Además

" " es una String por lo tanto ((i + 1) + " ") = 1CON ESPACIO (String concatenación)

mismo modo, cuando se añade j y última 1, su ser añadido a una por lo tanto Stringconcatenación String toma lugar, que justifica la salida que está recibiendo.

Ver

+0

Muchas gracias ... No sabía que ... – sachinjain024

+3

Está pidiendo la diferencia –

+0

De nada, también vea el enlace que agregué en la respuesta –

2
int i = 0; 
    int k = Integer.parseInt("12"); 
    int j = k; 
    System.out.println(i+1 + " " + (j+1)); 

básicamente cuando se pone + "" + después de esta java simplemente añade los valores como cadena.

y cuando coloca (j + 1) entre paréntesis, su precedencia aumenta y se ejecuta primero y realiza la operación suma.

6

que es a causa de " ".

Cuando llega una Cadena, java no hace ningún cálculo después de eso y solo lo agrega como una cadena.

Por lo tanto, en su caso, i+1 se calcula en 1, pero " " + j+1 tiene una cadena en ella.Por lo tanto, solo se adjunta para formar 121

+0

¿Pero por qué no se agrega en el primer caso? Si es verdadero, debería ser como 01 121 – AurA

+0

cualquier primitiva/envoltura antes de que se compute la aparición de la primera Cadena, Cualquier cosa posterior a eso, solo se agrega al mismo tiempo. – Kshitij

+1

@AurA: porque básicamente se traduce en algo equivalente a: '" ".concat (j) .concat (1)' (o una versión similar usando StringBuilders, dependiendo de tu código y la versión de JVM). No puede adivinar lo que quiere, por lo que es bastante natural interpretación de izquierda a derecha. – haylem

3

La razón por la que ve este comportamiento es que la secuencia de los operadores + se evalúa de izquierda a derecha. Por lo que se evalúa como si entre paréntesis:

System.out.println((((i + 1) + " ") + j) + 1); 

El primer operador añade dos int valores y produce un valor int. El siguiente + agrega un int a un String y produce un String. Después de eso, todo es concatenación de cadenas. Puede presentar sus propios paréntesis para obtener el resultado que desea.

+0

+1 para una explicación en detalle. La mejor respuesta. –

+0

Sí +1, esta es la mejor respuesta – mprabhat

2

Cuando usa " " La expresión después de eso se evalúa como cadena.

El uso de corchetes ( y ) alrededor de una expresión puede resolver el problema en la mano.

System.out.println(i+1 + " " + (j+1)); 
1

+ operador está sobrecargado para la adición y la concatenación de cadenas lo que está haciendo es la concatenación de cadenas y no .. Además Use soportes para la realización de adición.

1

parseint básicamente devolverá int (consulte la API de Java), y solo hay un tipo int en Java. en este ejemplo usaste "", donde Java lo tratará como una cadena. en cualquier operación, asegúrese de no mezclar cadenas con cálculos. Utilice siempre paréntesis para separar String de los cálculos.

1

Esto sucede porque el operador + se ha marchado de asociatividad y tiene una función sobrecargada con cuerdas, así que cuando usted tiene este

int i = 0; int k = Integer.parseInt("12"); int j = k; i+1 + " " + j+1

TI primeras sumas i + 1 que da 1 a continuación resume 1 + " ", que utiliza la función de sobrecarga de la misma para concatenar 1 y "", por lo que da una cadena con el valor de "1". Después de eso, suma "1 " + j y como uno de los operandos es una cadena, tiene el mismo comportamiento, y así sucesivamente.

0

Interger.parseInt (String str) es un método de clase contenedora que se utiliza para convertir el tipo Obj de cadena al tipo de datos primitivo (int). esto se usa generalmente en trabajo de marco de colección para convertir datos primitivos a objetos y viceversa

Cuestiones relacionadas