Какова цель long, double, byte, char в Java? - PullRequest
46 голосов
/ 06 января 2009

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

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

Ответы [ 7 ]

114 голосов
/ 06 января 2009

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

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

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

Не зацикливайтесь на использовании памяти этих типов, если вы действительно не понимаете этого. Например:

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

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

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

18 голосов
/ 06 января 2009

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

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

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

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

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

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

3 голосов
/ 06 января 2009

Я полагаю, есть несколько целей для таких типов:

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

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

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

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

3 голосов
/ 06 января 2009

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

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

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

0 голосов
/ 15 декабря 2016

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

0 голосов
/ 06 января 2009

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

См. Ссылку для ответа

0 голосов
/ 06 января 2009

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

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

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

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

...