Какова цель длинных, дважды, байта, символа в Java?

Перейти к библиотеке AbacusUtil . Он предоставляет точный API, который вы хотите, и многое другое:

IntStream.iterate(1, n -> n + 1).takeWhile(n -> n < 10).forEach(System.out::println);

Объявление: Я разработчик AbacusUtil.

46
задан Click Upvote 6 January 2009 в 09:41
поделиться

6 ответов

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

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

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

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

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

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

Примечание, что Строка не является типом примитива, таким образом, это действительно не принадлежит этого списка.

114
ответ дан Neil Coffey 7 November 2019 в 23:46
поделиться

Интервал Java составляет 32 бита, в то время как длинными составляют 64 бита, поэтому когда необходимо представить целые числа, больше, чем 2^31, долго друг. Для типичного примера использования длинных см. System.currentTimeMillis ()

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

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

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

Символ представляет отдельный символ, который составляет 16 битов. Это - тот же размер как короткое, но короткое подписывается (-32768 к 32 767), в то время как символ не подписан (от 0 до 65 535). (Это означает, что IP номер порта, вероятно, более правильно представлен как символ, чем короткое, но это, кажется, вне намеченного объема для символов...)

Для действительно authorative источник на этих деталях, se спецификация языка .

Java
18
ответ дан Rolf Rander 7 November 2019 в 23:46
поделиться

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

См. эту ссылку для Вашего ответа

-1
ответ дан Kezzer 7 November 2019 в 23:46
поделиться

Я предполагаю, что существует несколько целей к типам того вида:

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

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

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

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

3
ответ дан Ben 7 November 2019 в 23:46
поделиться

Можно взглянуть здесь о типах примитивов в Java.

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

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

3
ответ дан Romain Linsolas 7 November 2019 в 23:46
поделиться

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

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

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

мне нужны "маленькие" для базы данных и операций с потоками.

0
ответ дан guerda 7 November 2019 в 23:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: