Инициализация двойного объекта Java с другими объектами числового типа
В документации по двойным объектам он имеет только два конструктора, один из которых принимает двойное значение, а другой - строковое значение. Однако я только что обнаружил, что если мы инициализируем его с другими объектами типа Number, он также будет работать Например, следующий код будет работать:
Integer i = Integer.valueOf(10);
Double d1 = new Double(i);
Long l = Long.valueOf(100);
Double d2 = new Double(l);
Так что мне интересно, что за этим стоит? Автобокс / распаковка будет выполнять преобразование между Double/double, Long/long и Integer/int, но я не понимаю, почему конструктор Double будет принимать другие типы данных.
1 ответ
Long l = Long.valueOf(100);
Double d2 = new Double(l);
Приведенный выше код не делает Double(Long)
звоните, это делает доступным Double(long)
вызов с распакованным параметром из Long
в long
, Это работает только потому, что long
совместим с double
,
Так:
Однако я только что обнаружил, что если мы инициализируем его с другими объектами типа Number, он также будет работать
Нет, вы все еще вызываете тот же конструктор, который принимает double
в качестве параметра.
Как примечание, когда у вас есть Number
объект под рукой, скорее назовите его doubleValue()
метод, чтобы получить примитив, вместо создания другого объекта, создавая его с помощью new Double(long)