Когда я должен использовать Boolean вместо boolean ?. Я имею в виду, почему я хочу иметь нулевое значение в переменной, которая должна содержать либо «true», либо «false». Один спонтанный ответ (большинства людей) был бы, если значение неизвестно. т. е. если мы не знаем, истинно или ложно. Но с точки зрения программирования я думаю, что использование Boolean может нарушить код, поскольку мы не будем знать, что внутри. Итак, я думаю, что использование примитивного типа лучше, чем обертка. Исправьте меня, если я ошибаюсь.Когда следует использовать Boolean вместо boolean?
ответ
Вообще говоря, классы-обертки используются в тех случаях, когда объект необходим или сильно предпочтителен. Вне этих ситуаций, то лучше использовать примитивные типы, так как они имеют более низкие накладные расходы, вы можете использовать ==
и т.д. Есть два с половиной основной ситуации, в которых это часто видело:
- Коллекция. Это теперь подмножество следующего случая, но даже до Java 5 классы Collections только поддерживали объекты как ключи и значения, и это не изменилось.
- Generics. Общие типы могут работать только с объектами, а не с примитивами, и поэтому, если вы используете «boolean» в качестве параметра типа, он должен быть классом-оболочкой. Например, если вы используете
Future
, вы должны использоватьBoolean
вместоboolean
. (HT @ user949300) - ORM. JPA и другие системы ORM технически могут использовать примитивные поля, но обычно принято использовать классы-оболочки, так как накладные расходы достаточно высоки, что на самом деле не имеет никакого значения, и классы-оболочки могут представлять значение
NULL
, которое может присутствовать в база данных.
Поскольку логические значения ограничены либо true
или false
, это редкость, чтобы увидеть их использовали в коллекциях или дженериков; вообще говоря, если бы вы имели значение boolean как значение, вместо этого вы просто используете Collection#contains
.
+1 Хорошая точка в Generics. Пример, если длительный процесс (Будущее) должен вернуть true/false, он должен возвращать логическое, а не логическое. – user949300
Что делать, если вам нужно использовать коллекции? Коллекция не будет хранить примитивные типы, вам нужно сохранить там объект. Коллекции предоставляют так много полезности apis, поэтому, если вы хотите использовать их, необходим объект Boolean, поскольку коллекции нужны объекты. Хотя вы всегда можете использовать автобоксинг, что означает, что вы защищены от создания объекта, и сборщик заботится о нем внутренне.
IMHO примитив лучше.
Всегда предпочитайте примитивы поверх оберток. Там, где я могу использовать примитивы, я им нахожусь, потому что во время выполнения, если мы используем обертки, происходят boxing conversions и unboxing conversions, и, очевидно, это занимает больше времени. Если вы используете примитив, вы сохраните это время.
И как обычно это зависит от ваших требований, нужно ли Object
(который может быть null
), или вы можете использовать примитивные (который не может быть null
) в вашей ситуации.
Например: предположим, что вы имеете дело с коллекцией, тогда у вас нет опции, вы должны использовать обертки :).
Что делать, если вам нужно «null»? Это должно быть единственным соображением. «Экономия времени или памяти» - это не проблема с Boolean, у которой есть только два статических экземпляра, которые уже созданы до того, как ваша программа даже начнет работать. – Thilo
@Thilo True. Вот почему я использовал термин Object, который может быть «null». –
Согласен с @Thilo. Хотя есть веские причины для предпочтения примитивов поверх оболочек, производительность редко возникает, особенно с булевыми. Не понимаю, почему этот ответ получает все голоса. – user949300
Классы Wrapper будут в тех случаях, когда объект требуется или настоятельно рекомендуется хранить в объектах в коллекциях, кеше или сеансе и т. Д., Где требуется объект (если нет, JRE преобразует примитивы в классы Wrapper, прежде чем они хранятся во вторичном кэше). Ниже ссылка будет объяснить лучше:
Логическое есть 3 возможных значения (NULL, истина, ложь) в то время как логическое может быть только (истина, ложь).
Boolean
- это объект, поэтому вы можете использовать его с дженериками. Например, вы можете иметь Map<String,Boolean>
для хранения значения true \ false для каждой строки (= key). Вы не можете сделать Map<String,boolean>
, потому что boolean
не объект - в частности, это не подкласс Object
. Дженерики являются обертками времени компиляции, поэтому Map<Foo,Bar>
на самом деле Map<Object,Object>
с умным литьем, независимо от того, что Foo
и Bar
- до тех пор, пока они являются классами или типами массивов. Но они не могут быть примитивными.
Я очень предпочитаю примитивы. Однако Booleans необходимы:
- Когда они идут в коллекции
- Если вам необходимо обеспечить нулевое значение. По моему опыту, это в основном, если они хранятся в базе данных, и вам нужно указать нуль, чтобы указать, что они еще не были прочитаны, или пользователь еще не заполнил какую-либо форму.
Booolean - это объект/ссылочный тип, который обертывает логическое значение, тогда как boolean в примитивном типе.
Boolean - Вы получите больше методов, которые будут полезны.
boolean - Сэкономит вам много памяти. Но если вы используете Boolean.valueOf(value) of new Boolean(value)
, это не должно быть причиной.
Преобразование между примитивами и объектами, подобными этому, известно как бокс/распаковка.
Нажмите на ссылку ниже для получения дополнительной информации:
http://javaeye.wordpress.com/2008/06/17/boxing-and-unboxing-conversion/
http://java.sun.com/j2se/1.5.0/docs/guide/language/autoboxing.html спонтанный ответ
- 1. GCM string вместо boolean
- 2. Почему я должен передавать Boolean как параметр вместо «boolean»?
- 3. ArrayList.add return String вместо boolean
- 4. java: boolean instanceOf Boolean?
- 5. Как использовать setIs24HourView (boolean)?
- 6. getResource возвращает boolean вместо String []
- 7. ArrayAppend возвращает boolean вместо массива
- 8. Функция возвращает boolean вместо соответствующего
- 9. Android: лучше использовать boolean?
- 10. Dozer Boolean Mapping - Boolean Values
- 11. Сравнение с Boolean/boolean в javascript
- 12. Компилятор JAXB связывает xs: boolean с Java boolean вместо Boolean wrapper class
- 13. Зачем использовать {} вместо нового Object() и использовать [] вместо нового Array() и true/false вместо нового Boolean()?
- 14. System.Web.UI.Page.ProcessRequestMain (Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
- 15. Flow bool, boolean и Boolean
- 16. Convert Boolean to boolean (java)
- 17. java bean boolean filed to json & boolean vs Boolean
- 18. Axis2 convert xs: boolean to java Boolean
- 19. Тип несоответствия: boolean [], Boolean [], ArrayList <Boolean>
- 20. Зачем использовать Fragment # setRetainInstance (boolean)?
- 21. Возвращаем элемент с помощью `array.some()` вместо boolean
- 22. Java trie node Boolean vs boolean
- 23. Событие, когда boolean is true
- 24. Boolean Query
- 25. convert xs: boolean value для Java Boolean
- 26. Как работает экстрактор, когда функция `unapply` возвращает Boolean вместо опции?
- 27. Как включить аргумент integer <120 boolean boolean boolean boolean 'в самый компактный пакет, возможно
- 28. Заданное условие «$ (CleanWPPAllFilesInSingleFolder)» вместо «boolean» означает «».
- 29. Что использовать: вместо переменной boolean или для значения true/false
- 30. Boolean Simplification
большинства людей это ваш ответ здесь. – Thilo
Я не согласен с двойным закрытием; этот вопрос неверно назван и больше спрашивает о 'boolean' против' int'. – chrylis