2014-10-10 5 views
2

Я узнал из других ссылок & ТАК, что Double имеет множество недостатков.Двойной класс с двойным примитивным типом данных

Двойные недостатки по сравнению с двойным примитивного типа данных:

  1. Это медленнее (ссылка: Java Double vs double: class type vs primitive type)
  2. Это займет больше памяти из метаданных, участвующих в ней.

Теперь я знаю, что есть некоторые манипуляции, что мы можем сделать с помощью Double. JavaDoc, но большинство (85%) этих методов статичны, но это не огромное преимущество. Еще одна вещь, которую я знаю, что double не может быть нулевым.

Double doubleClass = null; // Is valid 
double doubleType = null; // Results in NPE 

После всех этих недостатков я не могу понять, почему мы использовали двойной и не двойной сценарий реальной жизни. Могут ли некоторые привести пример реального мира и объяснить.

Благодаря

+6

Вы использовали * коллекции * ?, Кроме того, 'double doubleType = null; // Результаты в NPE' не компилируются. – TheLostMind

+0

еще нет. Я нахожусь в фазе обучения. –

+0

@ newbie2314 Комментарий от TheLostMind на самом деле отличный ответ на ваш вопрос. – DeiAndrei

ответ

2

Есть много основных причин, по которым вы должны использовать двойной

  1. Collections API, что нужно использовать класс, а не примитивный тип

  2. Некоторые Вы знаете, что двойные могут иметь различную точность, если они поступают из разных источников данных. Вы можете использовать .equals класса отметить большинстве случаев

    double d1,d2; // Initalized to some value 
    d1==d2; // will return true but some(very few will return false) 
    

    Вы можете прочитать об этом на .equals method

  3. Как вы уже упоминали, что Double может быть пустым и дважды не может быть. Подумайте о сценарии, в котором значение какого-либо объекта может или может существовать, если оно не будет тогда, когда мы хотим, чтобы оно было нулевым в базе данных при его извлечении, это вызовет NPE с двойным, но с Double это не будет.

Вы должны использовать примитивный тип, когда это возможно, а не Double.

+0

спасибо, что указали часть .equals ... –

3

Там две основные причины, насколько я могу видеть.

  1. Есть библиотеки, которые просто не работают с примитивами. (Collections API - это тот, с которым вы скорее всего столкнетесь в ближайшее время, но все, что использует generics, будет аналогичным).
  2. Именно тот факт, что Double является ссылочным типом и поэтому может быть null. Иногда эта информация важна. (Представьте себе сценарий, когда пользователь может заполнить различные поля в форме, некоторые из них являются необязательными, и вы хотите узнать, было ли заполнено поле. Значение null является достаточно хорошим индикатором того, что поле формы осталось пустым.)

Но в целом вы правы, когда это возможно, вы должны использовать примитивный тип.

+0

Спасибо вам, это делает его более понятным. Оцените пример того, что я искал. –

2

Double является классом обертки над примитивом двойной. В структуре Java Collection есть такие контейнеры, как List, Set и т. Д. Проблема с этими контейнерами заключается в том, что они не могут принимать примитивы . Таким образом, double неявно преобразуется в Double и вставляется в коллекции (Autoboxing).

Double doubleClass = null; // Is valid --> Double is not a primitive. So, you can get NPE if you do doubleClass.someInstanceLevelFieldOrMethod. 

double doubleType = 5.5; //is a primitive 

.

Кроме того, Двойной будет медленнее, чем двойной, потому что есть некоторые бухгалтерские/накладные расходы для Классы, в отличие от примитивов.

PS: Двойной обеспечивает много APi/методов, чтобы делать что-то.Пример - Double.parseDouble(TypeX value) Создает новый двойной от стоимости TypeX

+0

Извините, если это звучит глупо, но его основная цель для коллекций, а не где-нибудь еще? –

+0

@ newbie2314 - Это одна из причин. Кроме того, он предоставляет методы [здесь] (http://docs.oracle.com/javase/7/docs/api/java/lang/Double.html). – TheLostMind

+0

@TheLostMind Double.parseDouble - это еще не статический звонок? – StackFlowed

Смежные вопросы