Какова цель long, double, byte, char в Java?

Итак, я изучаю java, и у меня есть вопрос. Кажется, что типы int, boolean и string подойдут практически для всего, что мне когда-либо понадобится с точки зрения переменных, за исключением, возможно, float, который можно использовать, когда десятичные числа необходимы в числе.

Мой вопрос: используются ли другие типы, такие как long, double, byte, char и т. д., В обычном повседневном программировании? Для каких практических целей они могут быть использованы? Для чего они существуют?

Интересно, почему этот вопрос был отклонен? Это кажется разумным спросить, но не обязательно легко гуглить.

Ben 06.01.2009 12:36
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
46
1
88 616
7
Перейти к ответу Данный вопрос помечен как решенный

Ответы 7

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

long, double, byte и т. д. используются, если вам нужно только небольшое целое число (или что-то еще), которое не тратит впустую ваше пространство кучи.

Я знаю, что в наше время достаточно оперативной памяти, но не стоит ее тратить зря.

Мне нужны «маленькие» для баз данных и потоковых операций.

Это относительно данных, с которыми вы имеете дело. Нет смысла использовать тип данных, который резервирует большую часть памяти, когда вы имеете дело только с небольшим объемом данных. Например, многие типы данных резервируют память еще до того, как они будут использованы. Возьмем, например, массивы, они зарезервируют размер по умолчанию (скажем, 256 байт <- пример!), Даже если вы используете только 4 байта из этого.

См. Эту ссылку за ваш ответ

Я читал это прямо перед тем, как спросить об этом, и не понял, поэтому проголосовал против

Click Upvote 06.01.2009 12:34

Накладные расходы на массивы не должны быть такими большими. Больше порядка 16 байт.

Tom Hawtin - tackline 06.01.2009 17:06

Вы можете посмотреть здесь о примитивных типах в Java.

Главный интерес между этими типами - это использование памяти. Например, int использует 32 бита, а байт использует только 8 бит.

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

Думаю, у таких типов есть несколько целей:

1) Они вводят ограничения на размер (и знак) переменных, которые могут в них храниться.

2) Они могут добавить немного ясности коду (например, если вы используете char, то любой, кто читает код, знает, что вы планируете в нем хранить).

3) Они могут экономить память. если у вас есть большой массив чисел, все из которых будут беззнаковыми и меньше 256, вы можете объявить его как массив байтов, сэкономив некоторую память по сравнению с тем, если бы вы объявили массив целых чисел.

4) Вам нужно long, если числа, которые вам нужно сохранить, больше 2 ^ 32 и double для очень больших чисел с плавающей запятой.

пожалуйста, исправьте вопрос о необходимости удвоения для чисел больше 2 ^ 32

David Schmitt 06.01.2009 13:21

ой, извините. Исправлено это сейчас.

Ben 06.01.2009 15:00

вдвое больше полезно для точных значений; величина менее важна. Пункт (1) должен быть "вызывает скрытие ошибок переполнения" :).

Tom Hawtin - tackline 06.01.2009 17:05

Java int имеет 32 бита, а long - 64 бита, поэтому, когда вам нужно представить целые числа больше 2 ^ 31, long - ваш друг. Типичный пример использования long см. В System.currentTimeMillis ().

Байт составляет 8 бит и является наименьшим адресуемым объектом на большинстве современных аппаратных средств, поэтому он необходим при чтении двоичных данных из файла.

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

Короткий - два байта, 16 бит. На мой взгляд, это наименее необходимый тип данных, и я действительно не видел этого в реальном коде, но, опять же, он может быть полезен для чтения двоичных форматов файлов или выполнения сетевых протоколов низкого уровня. Например, номера IP-портов 16-битные.

Char представляет собой один символ, который составляет 16 бит. Это тот же размер, что и короткий, но короткий имеет знак (от -32768 до 32767), а символ без знака (от 0 до 65535). (Это означает, что номер порта ip, вероятно, более правильно представлен как char, чем как short, но, похоже, это выходит за рамки предполагаемой области для символов ...)

Для действительно авторитетного источника по этим деталям смотрите спецификация языка Java.

Меня очень беспокоит тот факт, что короткая подпись и char - неподписанная вещь. Пожалуйста, мистер Ява, просто верните мне мой "неподписанный" модификатор для целых чисел! :-)

Brian Knoblauch 06.01.2009 16:00

Брайан: Я бы предпочел, чтобы byte, short и char не являлись числовыми. Лучше иметь int и long нечисловые, с разумным числовым рациональным целым числом произвольного размера.

Tom Hawtin - tackline 06.01.2009 17:02

Один из вариантов использования короткого типа - это массивы. Если вам нужно обработать много чисел в памяти и вы знаете, что все они уместятся в 16-битном формате, вы можете сэкономить 50% своей оперативной памяти, используя short [] вместо int []. crazysquirrel.com/computing/java/speed_and_memory/…

markusk 04.06.2009 01:03
Ответ принят как подходящий

За возможным исключением «коротких», что, возможно, является пустой тратой места - иногда буквально все лошади для курсов:

  • Используйте int, когда вам не нужны дробные числа и у вас нет причин использовать что-либо еще; в большинстве конфигураций процессоров / ОС это размер числа, с которым машина может справиться наиболее эффективно;
  • Используйте двойной, когда вам нужны дробные числа, и у вас нет причин использовать что-либо еще;
  • Используйте символ, когда вы хотите представить символ (или, возможно, в редких случаях, когда вам нужна двухбайтовая беззнаковая арифметика);
  • Используйте байт, если вам нужно специально манипулировать байтом подписанный (редко!), Или когда вам нужно переместить блокировать байтов;
  • Используйте логический, когда вам нужен простой флаг «да / нет»;
  • Используйте длинный в тех случаях, когда вам нужно целое число, но где величина может превышать 2 миллиарда (размеры файлов, измерения времени в миллисекундах / наносекундах, при расширенном использовании для сжатия нескольких фрагментов данных в одно число);
  • Используйте плавать в тех редких случаях, когда вы либо (а) сохраняете из них огромное количество и экономия памяти имеет смысл, либо (б) выполняете огромное количество вычислений и можете допустить потерю точности. Для большинства приложений "float" обеспечивает очень низкую точность, но операции могут быть в два раза быстрее - тем не менее, стоит протестировать это на своем процессоре, чтобы убедиться, что это действительно так! [*]
  • Используйте короткая, если вам действительно нужна арифметика со знаком 2 байта. Не так уж много случаев ...

[*] Например, в Hotspot на архитектурах Pentium fоперации loat и double обычно занимают одинаковое время, кроме деления.

Не увязайте в использовании памяти этими типами, если вы не понимаете В самом деле. Например:

  • размер каждого объекта округляется до 16 байт в Hotspot, поэтому объект с однобайтовым полем будет занимать точно такое же пространство, как и одиночный объект с длинным или двойным полем;
  • при передаче параметров методу каждый тип занимает в стеке 4 или 8 байтов: вы ничего не сохраните, изменив параметр метода, скажем, с int на short! (Я видел, как люди это делают ...)

Очевидно, существуют определенные вызовы API (например, различные вызовы для задач, не требующих интенсивного использования ЦП, которые по какой-то причине принимают числа с плавающей запятой), где вам просто нужно передать ему тип, который он запрашивает ...!

Обратите внимание, что String не является примитивным типом, поэтому на самом деле он не входит в этот список.

Обратите внимание, что char представляет символ только в том случае, если все символы, которые вы используете, находятся внутри базовой многоязычной плоскости (BMP) Unicode. После того, как вы покинете BMP, обработка символов в Java станет фанковой очень. Не обязательно что-то, о чем вам нужно заботиться, если вы работаете только с западными языками, но вы должны знать об этом.

sleske 28.12.2011 20:07

См., Например, этот вопрос и ответ для объяснения: stackoverflow.com/questions/2533097/java-unicode-encoding

sleske 28.12.2011 20:07

Единственное преимущество, которое я могу придумать для примитивов byte и short, заключается в том, что компилятор позволяет хранить их непосредственно в массивах byte[] и short[], но не позволяет сохранять int без преобразования типов. Есть ли еще какое-то преимущество?

supercat 03.09.2013 04:57

(или, возможно, редкие случаи, когда вам нужна двухбайтовая беззнаковая арифметика) что?

JohnMerlino 26.10.2014 20:06

Целые числа следует использовать для чисел в целом. Парные - это основной тип данных, используемый для представления десятичных знаков. Струны может содержать практически любой тип данных, но проще использовать целые числа, а использование строки, за исключением текста, сбивает с толку. Chars используются, когда вы хотите удерживать только одну букву, хотя по сути они используются только для ясности. Шорты, лонгсливы и плавки может не понадобиться, но если вы, например, создаете массив размером 1,00000, который должен содержать только числа меньше 1000, тогда вы захотите использовать шорты просто для экономии места.

Другие вопросы по теме