Что происходит когда java.lang. Двойной объект инициализируется, не используя вызов для конструктора, но вместо этого с помощью примитива? Это, кажется, работает, но я не совсем уверен почему. Там некоторое неявное преобразование продолжает компилятор? Это использует Java 5.
public class Foo {
public static void main(String[] args) {
Double d = 5.1;
System.out.println(d.toString());
}
}
Это называется автобоксинг - функция, которая была добавлена в Java 5. Она автоматически преобразует примитивные типы в типы-обертки, такие как double
(примитив) и java.lang.Double
(объект-обертка). Компилятор java автоматически преобразует строку:
Double d = 5.1;
в:
Double d = Double.valueOf(5.1);
Он называется Автобоксинг
Автобоксинг и Авто-Распаковка Примитивные типы Преобразование между примитивные типы, такие как int, логические, и их эквивалент объектно-ориентированные аналоги, такие как Integer и Boolean, может потребоваться ненужное количество дополнительное кодирование, особенно если Преобразование требуется только для метода вызов API коллекций, для пример.
Автобоксинг и автоматическая распаковка Примитивы Java создают код, который более лаконично и легче следовать. В В следующем примере используется int сохранено, а затем извлечено из МассивСписок. Версия 5.0 оставляет преобразование, необходимое для перехода на a Целое число и обратно в компилятор.
До
ArrayList<Integer> list = new ArrayList<Integer>();
list.add(0, new Integer(42));
int total = (list.get(0)).intValue();
После
ArrayList<Integer> list = new ArrayList<Integer>();
list.add(0, 42);
int total = list.get(0);