Por que a adição de variáveis ??longos causar concatenação?
-
04-07-2019 - |
Pergunta
O que Java ver com variáveis ??longos durante a execução disso?
Versão errada 1:
Vector speeds = ... //whatever, speeds.size() returns 2
long estimated = 1l;
long time = speeds.size() + estimated; // time = 21; string concatenation??
Versão errada 2:
Vector speeds = ... //whatever, speeds.size() returns 2
long estimated = 1l;
long time = estimated + speeds.size(); // time = 12; string concatenation??
versão correta:
Vector speeds = ... //whatever, speeds.size() returns 2
long estimated = 1l;
long size = speeds.size();
long time = size + estimated; // time = 3; correct
Eu não entendo, por que Java concatenar-los.
Alguém pode me ajudar, por duas variáveis ??primitivas são concatenados?
Greetings, Guerda
Solução
Eu suspeito que você não está vendo o que você pensa que você está vendo. Java não fazer isso.
Por favor, tente fornecer um href="http://pobox.com/~skeet/csharp/complete.html" rel="nofollow noreferrer"> curto que demonstra isso. Aqui está uma pequena mas completa programa que demonstra o comportamento correto, mas com o seu código "errado" (ou seja, um contra-exemplo).
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
}
}
Outras dicas
Meu palpite é que você está realmente fazendo algo como:
System.out.println("" + size + estimated);
Esta expressão é avaliada esquerda para a direita:
"" + size <--- string concatenation, so if size is 3, will produce "3"
"3" + estimated <--- string concatenation, so if estimated is 2, will produce "32"
Para chegar a este trabalho, você deve fazer:
System.out.println("" + (size + estimated));
Novamente, isto é avaliada esquerda para a direita:
"" + (expression) <-- string concatenation - need to evaluate expression first
(3 + 2) <-- 5
Hence:
"" + 5 <-- string concatenation - will produce "5"