Зачем использовать примитивные типы в java вместо классов Wrapper? Я хочу знать, что уже есть классы-оболочки в java, то зачем нам использовать примитивные типы? Какова важность примитивных типов в java?Типы примитивов в Java
ответ
Ваш вопрос обратный. Примитивные типы более фундаментальны, чем их обертки.
На самом деле единственной полезной вещью, которую предоставляют вам обертки, является способность рассматриваться как подкласс объекта (чтобы их можно было помещать в коллекции и т. Д.). Весь полезный материал (например, арифметика и порядок) обеспечивается примитивным типом.
Обратите внимание, что в то время как вы можете сказать такие вещи, как:
Integer i = Integer.valueOf(4);
Integer j = Integer.valueOf(2);
Integer k = i + j;
это просто удобство. Под этой строкой последняя строка выглядит примерно так:
Integer k = Integer.valueOf(i.intValue() + j.intValue());
так, чтобы арифметика происходила на примитивных значениях. (Это удобство известно как бокс/распаковка.) Существует производительность штраф это, так что на моей машине, в этом цикл:
for (int i=0; i<10000000; i++) { }
примерно в 10 раз быстрее, чем этот цикл:
for (Integer i=0; i<10000000; i++) { }
производительность, примитивные классы сопоставляются процессору без необходимости проходить столько операций.
В случае логических, int и float - вы можете сделать их volatile и гарантировать, что они не требуют синхронизации (чтение и запись являются атомарными)
В Java каждый объект имеет некоторые накладные расходы. Это зависит от JVM и размера «слова» в целевой архитектуре (64-разрядная или 32-разрядная), но я обычно оцениваю, что каждый объект имеет около 40 байт «накладных расходов» сверх того, что необходимо для его полей ,
Так, например, массив из 1024 байтов - это один объект с 40 байтами служебных данных; он имеет член length
(int
), которому требуется 4 байта, и для каждого элемента требуется 1 байт, в общей сложности около 1k.
Массив 1024 Byte
случаев имеют накладные расходов самого массива, его length
члена, а затем около 41 байт для каждого экземпляра Byte
(40 байт накладных расходов, а также 1 байт данных). В целом, это более 41 тыс.! Гораздо больше, чем примитив byte[]
.
Поскольку типы обертки неизменны, были предложения по умным трюкам, чтобы примитивные данные выглядели как обернутые экземпляры объектов, но до сих пор ни один из этих механизмов не был реализован.
[юмор] Чтобы сохранить ввод текста! Это:
int i = 4;
int j = 38;
int k = i + j;
короче, чем набрать:
Integer i = new Integer(4);
Integer j = new Integer(38);
Integer k = i + j;
[/ юмор]
В действительности, другие ответы говорят, это лучше, чем я мог.
@ matto1990: Не понял смысл вашего редактирования, так как ваша версия или моя работа будут работать. Таким образом, я предпочел бы, чтобы мой пост остался один. Но эй, спасибо, что помог мне получить значок «Очистить»! – GreenMatt
Извините, должно быть, объяснил. С некоторыми целыми числами (ниже, я думаю, это так) класс Integer создает их и сохраняет их в памяти. Следовательно, если вы вызываете Integer.valueOf (4), вы получите уже существующий класс. Вызов нового Integer (4) создаст новый экземпляр Integer и сохранит его в памяти. Это всего лишь крошечная вещь, и на практике это вообще не имеет значения. Просто увидел это и подумал, что я его поменяю. Взгляните сюда в документах Java: http://download.oracle.com/docs/cd/E17476_01/javase/1.5.0/docs/api/java/lang/Integer.html#valueOf (int) – matto1990
@ matto1990 : Спасибо за объяснение, это вызвало тусклую память. Однако код в вашем редактировании длиннее моего, поэтому он еще лучше доказывает! :-) – GreenMatt
- 1. Типы примитивных примитивов Java
- 2. одновременное обновление примитивов в Java
- 3. Выращивание массива примитивов в java
- 4. Являются ли неправильные типы Kotlin неправильными для примитивов на JVM?
- 5. Все неизменные типы в java
- 6. Java-алгоритмы для геометрических примитивов
- 7. C#: десериализация примитивов JSON в .NET сложные типы
- 8. Нужны ли примитивные типы или непримитивные типы в интерфейсах Java?
- 9. Массивы примитивов в java vs C++
- 10. сравнить объекты типа примитивов в java
- 11. Смущает идея неявного сужения примитивов в Java
- 12. Сохранение пары примитивов в Java HashMap
- 13. Сравните два массива примитивов в Java?
- 14. Создать массив примитивов или объектов в Java
- 15. Примитивов типов данные переполнение в Java
- 16. Является ли массив примитивов Java хранимым в стеке или куче?
- 17. Типы Java для Java Типы SQL Util
- 18. Согласованное использование примитивов и обернутых примитивов
- 19. Java-8: массив булевых примитивов для потока?
- 20. Java Vector или ArrayList для примитивов
- 21. Java: присоединиться к массив примитивов с сепаратором
- 22. Типы и типы массивов Java
- 23. Java: общая коллекция для хранения примитивов разных типов
- 24. Литье примитивов типа
- 25. Правильный способ использования примитивов уровня
- 26. Кольцевые типы в Java
- 27. несовместимые типы в Java
- 28. Типы исключений в Java
- 29. типы переменных в java
- 30. Почему возможно создать коллекцию массива примитивов, но не сбор примитивов
Вопрос действительно действителен в некотором смысле - на практике, в Java классы-оболочки определены в терминах примитивных типов, а последние являются «волшебными». Но вполне возможно, что сами классы являются «волшебными», и нет примитивов с типизированными значениями. –