Почему я не вижу их довольно часто. Я вижу их в основном для сетей, где размер действительно имеет значение. Но, например, у меня есть переменная, которая использует только числа из диапазона 1-10, не следует ли использовать байт? Я использую для кодирования C/C++, используя как можно меньше памяти, почему это не так в java?Использование байтов, коротких и других примитивных типов
ответ
Фактически в большинстве процессоров, поддерживающих Java, 32-разрядные целые числа - - самый быстрый. Например, на процессорах Intel 32-разрядные целочисленные регистры имеют кратчайшие коды операций, а 16-разрядные целые числа обрабатываются немного медленнее. Кроме того, большую часть времени, используя byte
s или short
, вы не сэкономите место для вас.
Это никак не связано с OOPness; даже в C, который действительно не имеет каких-либо концепций ООП, очень часто используется int
почти для каждого номера, потому что его размер часто выбирается так, чтобы он был fastest width for the given architecture.
Если это не такой низкий уровень, как бит-маскирование или интенсивность памяти, где каждый байт каждого объекта занят вопросами, я бы, вероятно, использовал int
, даже если это может сделать byte
.
Не забывайте, что объекты Java часто дополняются, что облегчает доступ к JVM. поэтому в зависимости от других полей вашего класса использование байта может по-прежнему занимать ту же память, что и int! См. javamex's explantation of Java's memory usage
Если я знаю, что существует только 10 возможных значений, из соображений ОО, я бы не стал использовать byte
для его хранения. Почему значения будут составлять от 1 до 10? Значит ли каждое значение что-то особенное? Если это так, я бы, вероятно, использовал enum
и дал каждому из этих 10 значений намеренное раскрывающее имя.
Кто бы ни выбрал downvote, объясните, почему? – dkatzel
- 1. Использование примитивных типов с ClassLoader
- 2. Размер примитивных типов данных
- 3. FluentNHibernate и коллекция примитивных типов
- 4. Использование списков примитивных типов в EF
- 5. Использование Hamcrest matchers с массивами примитивных типов
- 6. Использование интерфейса Comparable для примитивных типов данных
- 7. Стандартная Java библиотека для преобразования порядка байтов примитивных типов + UUID
- 8. Использование процессора при использовании байтов и коротких типов данных в Java
- 9. Расширение примитивных типов
- 10. Совершенная пересылка примитивных типов
- 11. Оптимальная сериализация примитивных типов
- 12. Продление примитивных типов JavaScript
- 13. Swagger Определение примитивных типов
- 14. MyBatis - списки примитивных типов
- 15. Использование ожиданий jmockit с помощью шаблонов и примитивных типов
- 16. Передачи данных и преобразования типов Struts 2 для примитивных типов
- 17. NSCode: кодировщик и декодер для примитивных типов
- 18. Определяемая длина примитивных типов C и Fortran
- 19. Rails ActiveRecord и массив примитивных типов
- 20. Выравнивание и размер примитивных типов C++
- 21. ArrayList примитивных типов в Hibernate
- 22. Кто инициирует инициализацию примитивных типов?
- 23. Доступ примитивных типов в RealmSwift
- 24. Выбрасывание примитивных типов в C++
- 25. Преобразование примитивных типов в int
- 26. Какова опасность возвращения примитивных типов?
- 27. ТипКонвертеры сломанные для примитивных типов?
- 28. Перегрузка оператора для примитивных типов
- 29. значение параметра экземпляру примитивных типов
- 30. Java Итератор для примитивных типов
Laziness возможно –
Я не уверен на 100% об этом, поэтому опубликую его как комментарий. Я не удивлюсь, если это связано с тем, что Java нуждается в управлении средой исполнения Java, поэтому в таком случае нужно сохранить 16 байт, когда она должна быть уложена сверху в среду, которая в 1000 раз больше ее размера. C++ не нуждается в этом, поэтому сохранение этих байтов может фактически сделать разницу в производительности. – Loocid
Возможный дубликат http://stackoverflow.com/questions/402247/anyone-using-short-and-byte-primitive-types-in-real-apps – Raedwald