Double vs double в java [дубликат]
Возможные Дубликаты:
Java: разные двойные и двойные по сравнению
в образце java-программы для одной из моих лабораторий у меня есть два разных метода, принимающих двойные и двойные параметры соответственно.
Как я различаю их, когда передаю им аргументы?
7 ответов
во-первых, вам нужно понять разницу между этими двумя типами.
double
- Это примитивный тип, а Double
- это объект.
код ниже показывает перегруженный метод, который, как я предполагаю, похож на ваш лабораторный код.
void doStuff(Double d){ System.out.println("Object call"); }
void doStuff(double d){ System.out.println("Primitive call"); }
существует несколько способов вызова этих методов:
doStuff(100);
doStuff(200d);
doStuff(new Double(100));
эти вызовы приведут к:
"Primitive call"
"Primitive call"
"Object call"
// Method A
public static void foo(Double d) {...}
// Method B
public static void foo(double d) {...}
очевидно, если вы проходите Double
объект Метод A будет называться, т. е. если у вас было что-то вроде:
Double d = new Double(1.0);
далее, Если вы передадите двойной литерал, вы вызовете Метод B. Что интересно, если у вас есть что-то вроде
double d = new Double(1.0);
в этом случае Метод B и будет называться, потому что тип of d
is double
; the Double
объект получает неупакованное на double
. На той же ноте, если бы у вас было:
Double d = 1.0;
затем Метод A будет называться, потому что типа d
будет Double
(the double
-литерал получает autoboxed к Double
).
- double
является примитивным типом, где as Double
- это фантик объекта.
- один из наиболее распространенных объектов обертки используется с Collection
.
например:
List<Double> d = new ArrayList<Double>();
- на Java 5 механизм Autoboxing
была представлена конвертировать между ними напрямую.
например:
double d = 10.41;
Double wrapper = d;
что у вас есть пример способ перегрузки. Хорошая часть заключается в том, что компилятор и JVM автоматически выбирают правильный метод на основе типа аргументов, которые используются при вызове метода.
Double
является ссылочным типом и double
- тип значения.
на
Double
class обертывает значение примитивного типа double в объекте. Объект типа Double содержит одно поле типа double."ссылке
как @ Fess упомянул и потому Double
является ссылочным типом, он может быть null
.
если вы хотите, вы можете explictly конвертировать из Double
до double
С .doubleValue()
метод и viceverrsa с new Double(1.0)
.
также как @millimoose сказал:
вы должны использовать
X.valueOf()
вместоnew X()
. ThevalueOf
методы позволяют кэшировать типы бокса, чтобы уменьшить использование памяти. (Не уверен, что это сделано дляDouble
но это хорошая привычка.)"
Double - это класс-оболочка, а double-примитивный тип, такой как c/C++. Как указывалось выше, Double в основном используется в дженериках, но также полезен везде, где есть необходимость в числовом значении и правильной инкапсуляции объекта. В большинстве случаев Double и double можно использовать взаимозаменяемо.