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




Примитивные типы данных необходимы, потому что они являются основой каждой сложной коллекции.
long, double, byte и т. д. используются, если вам нужно только небольшое целое число (или что-то еще), которое не тратит впустую ваше пространство кучи.
Я знаю, что в наше время достаточно оперативной памяти, но не стоит ее тратить зря.
Мне нужны «маленькие» для баз данных и потоковых операций.
Это относительно данных, с которыми вы имеете дело. Нет смысла использовать тип данных, который резервирует большую часть памяти, когда вы имеете дело только с небольшим объемом данных. Например, многие типы данных резервируют память еще до того, как они будут использованы. Возьмем, например, массивы, они зарезервируют размер по умолчанию (скажем, 256 байт <- пример!), Даже если вы используете только 4 байта из этого.
См. Эту ссылку за ваш ответ
Я читал это прямо перед тем, как спросить об этом, и не понял, поэтому проголосовал против
Накладные расходы на массивы не должны быть такими большими. Больше порядка 16 байт.
Вы можете посмотреть здесь о примитивных типах в Java.
Главный интерес между этими типами - это использование памяти. Например, int использует 32 бита, а байт использует только 8 бит.
Представьте, что вы работаете с большой структурой (массивы, матрицы ...), тогда вам лучше позаботиться о типе, который вы используете, чтобы уменьшить использование памяти.
Думаю, у таких типов есть несколько целей:
1) Они вводят ограничения на размер (и знак) переменных, которые могут в них храниться.
2) Они могут добавить немного ясности коду (например, если вы используете char, то любой, кто читает код, знает, что вы планируете в нем хранить).
3) Они могут экономить память. если у вас есть большой массив чисел, все из которых будут беззнаковыми и меньше 256, вы можете объявить его как массив байтов, сэкономив некоторую память по сравнению с тем, если бы вы объявили массив целых чисел.
4) Вам нужно long, если числа, которые вам нужно сохранить, больше 2 ^ 32 и double для очень больших чисел с плавающей запятой.
пожалуйста, исправьте вопрос о необходимости удвоения для чисел больше 2 ^ 32
ой, извините. Исправлено это сейчас.
вдвое больше полезно для точных значений; величина менее важна. Пункт (1) должен быть "вызывает скрытие ошибок переполнения" :).
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 - неподписанная вещь. Пожалуйста, мистер Ява, просто верните мне мой "неподписанный" модификатор для целых чисел! :-)
Брайан: Я бы предпочел, чтобы byte, short и char не являлись числовыми. Лучше иметь int и long нечисловые, с разумным числовым рациональным целым числом произвольного размера.
Один из вариантов использования короткого типа - это массивы. Если вам нужно обработать много чисел в памяти и вы знаете, что все они уместятся в 16-битном формате, вы можете сэкономить 50% своей оперативной памяти, используя short [] вместо int []. crazysquirrel.com/computing/java/speed_and_memory/…
За возможным исключением «коротких», что, возможно, является пустой тратой места - иногда буквально все лошади для курсов:
[*] Например, в Hotspot на архитектурах Pentium fоперации loat и double обычно занимают одинаковое время, кроме деления.
Не увязайте в использовании памяти этими типами, если вы не понимаете В самом деле. Например:
Очевидно, существуют определенные вызовы API (например, различные вызовы для задач, не требующих интенсивного использования ЦП, которые по какой-то причине принимают числа с плавающей запятой), где вам просто нужно передать ему тип, который он запрашивает ...!
Обратите внимание, что String не является примитивным типом, поэтому на самом деле он не входит в этот список.
Обратите внимание, что char представляет символ только в том случае, если все символы, которые вы используете, находятся внутри базовой многоязычной плоскости (BMP) Unicode. После того, как вы покинете BMP, обработка символов в Java станет фанковой очень. Не обязательно что-то, о чем вам нужно заботиться, если вы работаете только с западными языками, но вы должны знать об этом.
См., Например, этот вопрос и ответ для объяснения: stackoverflow.com/questions/2533097/java-unicode-encoding
Единственное преимущество, которое я могу придумать для примитивов byte и short, заключается в том, что компилятор позволяет хранить их непосредственно в массивах byte[] и short[], но не позволяет сохранять int без преобразования типов. Есть ли еще какое-то преимущество?
(или, возможно, редкие случаи, когда вам нужна двухбайтовая беззнаковая арифметика) что?
Целые числа следует использовать для чисел в целом. Парные - это основной тип данных, используемый для представления десятичных знаков. Струны может содержать практически любой тип данных, но проще использовать целые числа, а использование строки, за исключением текста, сбивает с толку. Chars используются, когда вы хотите удерживать только одну букву, хотя по сути они используются только для ясности. Шорты, лонгсливы и плавки может не понадобиться, но если вы, например, создаете массив размером 1,00000, который должен содержать только числа меньше 1000, тогда вы захотите использовать шорты просто для экономии места.
Интересно, почему этот вопрос был отклонен? Это кажется разумным спросить, но не обязательно легко гуглить.