Pregunta

¿Qué hace Java con las variables largas al realizar la adición?

Versión incorrecta 1:

Vector speeds = ... //whatever, speeds.size() returns 2
long estimated = 1l;
long time = speeds.size() + estimated; // time = 21; string concatenation??

Versión incorrecta 2:

Vector speeds = ... //whatever, speeds.size() returns 2
long estimated = 1l;
long time = estimated + speeds.size(); // time = 12; string concatenation??

Versión correcta:

Vector speeds = ... //whatever, speeds.size() returns 2
long estimated = 1l;
long size = speeds.size();
long time = size + estimated; // time = 3; correct

No lo entiendo, ¿por qué Java los concatena?

¿Puede alguien ayudarme, por qué se concatenan dos variables primitivas?

Saludos, guerda

¿Fue útil?

Solución

Sospecho que no estás viendo lo que crees que estás viendo. Java no hace esto.

Intente proporcionar un programa corto pero completo que demuestre esto. Este es un programa corto pero completo que demuestra el comportamiento correcto, pero con su " incorrecto " código (es decir, un contraejemplo).

import java.util.*;

public class Test
{
    public static void main(String[] args)
    {
        Vector speeds = new Vector();
        speeds.add("x");
        speeds.add("y");

        long estimated = 1l;
        long time = speeds.size() + estimated;
        System.out.println(time); // Prints out 3
    }
}

Otros consejos

Supongo que en realidad estás haciendo algo como:

System.out.println("" + size + estimated); 

Esta expresión se evalúa de izquierda a derecha:

"" + size        <--- string concatenation, so if size is 3, will produce "3"
"3" + estimated  <--- string concatenation, so if estimated is 2, will produce "32"

Para que esto funcione, debes hacer:

System.out.println("" + (size + estimated));

De nuevo, esto se evalúa de izquierda a derecha:

"" + (expression) <-- string concatenation - need to evaluate expression first
(3 + 2)           <-- 5
Hence:
"" + 5            <-- string concatenation - will produce "5"
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top