2015-01-07 8 views
-3

Предоставлено:понижающее приведение usng упаковщики по сравнению с примитивами

double x = 15d; 

Какой метод преобразования следует использовать:

int val = (int)x; 

Или:

int val = new Double(x).intValue(); 

Что Ore преимущества одного и того Другие?

+0

Я бы сказал, что нет большого влияния, если вы не работаете с критическими приложениями с коротким сроком действия в реальном времени. Если это ваш случай, используйте первый. В противном случае используйте тот, который вам лучше. IMO Я бы выбрал для простоты код для простоты. –

+1

Double.intValue, вероятно, использует (int) литье внутри; просто используйте бывший – ControlAltDel

ответ

3

new Double(x).intValue(); Кажется, что это было бы (тривиально) менее эффективно, хотя мне нечего туда отстаивать. Реально, нет никаких функциональных преимуществ в любом случае. Однако я считаю, что (int)x является более читаемым, что является значительным преимуществом.

Но самое главное, premature optimization is the root of all evil.

+1

Фраза * «преждевременная оптимизация - корень всех злых» * преждевременно оптимизирована. Если вы собираетесь процитировать его, по крайней мере, процитировать всю цитату, а не просто содержательную часть. –

0

Единственное отличие, которое я знаю, состоит в том, что для второго требуется создать новый объект класса Double перед возвратом целочисленного значения обратно (с вызовом .intValue()).

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

Вот почему я лично использую первый:

int val = (int) x; 
+0

'new Double' не создает анонимный объект, он создает объект« Double ». – m0skit0

+0

Что вы называете объектом, который не хранится в переменной? Я всегда называл это анонимным объектом (потому что у него нет имени). Я не путаю это с анонимным определением класса - другое понятие. – NoseKnowsAll

+0

Нет имени для этого, потому что на самом деле нет необходимости в имени для этого. Вы не должны использовать * анонимный *, потому что это имя для чего-то другого, и это путает. – m0skit0

0

Функционально они эквивалентны (дают одинаковый результат). Второй - расточительный (из-за размещения объектов) и менее читаемый. Нет смысла использовать его в пользу (int) x.

Вы также можете сделать что-то вроде этого: Integer.parseInt(String.format("%.0f", x)), он также будет работать. Просто потому, что вы можете что-то сделать, это не значит, что вам нужно.

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