Почему добавление длинных переменных вызывает конкатенацию?
-
04-07-2019 - |
Вопрос
Что делает Java с длинными переменными при выполнении сложения?
Неправильная версия 1:
Vector speeds = ... //whatever, speeds.size() returns 2
long estimated = 1l;
long time = speeds.size() + estimated; // time = 21; string concatenation??
Неправильная версия 2:
Vector speeds = ... //whatever, speeds.size() returns 2
long estimated = 1l;
long time = estimated + speeds.size(); // time = 12; string concatenation??
Правильная версия:
Vector speeds = ... //whatever, speeds.size() returns 2
long estimated = 1l;
long size = speeds.size();
long time = size + estimated; // time = 3; correct
Я не понимаю, почему Java объединяет их.
Кто-нибудь может мне помочь, почему две примитивные переменные объединены?
Привет, герда
Решение
Я подозреваю, что вы не видите то, что, как вы думаете, вы видите. Java этого не делает.
Попробуйте предоставить короткую, но полную программу , которая демонстрирует это. Вот короткая, но полная программа, которая демонстрирует правильное поведение, но с вашим " неправильным " код (то есть контрпример).
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
}
}
Другие советы
Полагаю, вы действительно делаете что-то вроде:
System.out.println("" + size + estimated);
Это выражение вычисляется слева направо:
"" + size <--- string concatenation, so if size is 3, will produce "3"
"3" + estimated <--- string concatenation, so if estimated is 2, will produce "32"
Чтобы это сработало, вы должны сделать:
System.out.println("" + (size + estimated));
Опять же, это оценивается слева направо:
"" + (expression) <-- string concatenation - need to evaluate expression first
(3 + 2) <-- 5
Hence:
"" + 5 <-- string concatenation - will produce "5"