Инициализация объекта Double с примитивным двойным значением - PullRequest
8 голосов
/ 20 июля 2010

Что происходит, когда объект java.lang.Double инициализируется, не используя вызов конструктора, а вместо этого используя примитив?Кажется, работает, но я не совсем уверен, почему.Есть ли какое-то неявное преобразование, происходящее с компилятором?Это использует Java 5.

public class Foo {

    public static void main(String[] args) {
        Double d = 5.1;

        System.out.println(d.toString());

    }

}

Ответы [ 3 ]

10 голосов
/ 20 июля 2010

Это называется Автобокс , который был добавлен в Java 5. Он автоматически преобразует между примитивными типами и типами-обертками, такими как double (примитив) и java.lang.Double (обертка объекта).Компилятор Java автоматически преобразует строку:

Double d = 5.1;

в:

Double d = Double.valueOf(5.1);
5 голосов
/ 20 июля 2010

Называется Автобокс

Автобокс и автоматическая распаковка Преобразование примитивных типов между примитивные типы, такие как int, boolean, и их эквивалент на основе объектов аналоги, такие как Integer и Boolean, может потребовать ненужного количества дополнительное кодирование, особенно если преобразование необходимо только для метода вызов API Коллекции, для Пример.

Автобокс и автоматическая распаковка Примитивы Java создают код, который более кратким и легким для подражания. В Следующий пример Int является хранится и затем извлекается из ArrayList. Версия 5.0 оставляет преобразование требуется для перехода к целое число и обратно в компилятор.

До

ArrayList<Integer> list = new ArrayList<Integer>();
  list.add(0, new Integer(42)); 
  int total = (list.get(0)).intValue();

* После 1017 *

ArrayList<Integer> list = new ArrayList<Integer>();
  list.add(0, 42);
  int total = list.get(0);
3 голосов
/ 20 июля 2010

Это называется autoboxing .

...