Подтвердить что ты не робот

Почему бы не использовать long для всех целых значений

В моем классе Java мы только что узнали о каждом из следующих примитивных типов данных:

  • byte
  • short
  • int
  • long

Поскольку тип данных long содержит большинство битов, не имеет смысла использовать исключительно тип данных long, чтобы избежать ограничений?

Вопросы

  • Существует ли конкретное падение с использованием только типа данных long?
  • Имеет ли смысл использовать, например, тип данных int вместо типа данных long?
4b9b3361

Ответ 1

Имеет ли смысл использовать, например, тип данных int вместо типа данных long?

АБСОЛЮТНО ДА.


ИСПОЛЬЗОВАНИЕ ПАМЯТИ/ДИСКОВ

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

Проверьте этот вопрос для дальнейшей информации.

Также, глядя на документацию примитивного типа Oracle, вы можете увидеть некоторые советы и использование памяти:

type    memory usage    recommended for
------- --------------- ---------------------------------------------------
byte    8-bit signed    The byte data type can be useful for saving memory in large arrays, where the memory savings actually matters.
short   16-bit signed   same as byte
int     32-bit signed   
long    64-bit          Use this data type when you need a range of values wider than those provided by int
float                   Use a float (instead of double) if you need to save memory in large arrays of floating point numbers. This data type should never be used for precise values, such as currency.

byte:

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

short:

Короткий тип данных представляет собой 16-битное подписанное двухкомпонентное целое число. Он имеет минимальное значение -32 768 и максимальное значение 32 767 (включительно). Как и в байте, применяются те же самые рекомендации: вы можете использовать сокращение для экономии памяти в больших массивах, в ситуациях, когда экономия памяти фактически имеет значение.

int:

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

long:

Длинный тип данных представляет собой 64-битное целое число с двумя дополнениями. Записанное long имеет минимальное значение -263 и максимальное значение 263-1. (...) Используйте этот тип данных, если вам нужен диапазон значений, отличный от значений, предоставляемых функцией int.

float:

Тип данных с плавающей точкой - это плавающая точка IEEE 754 с плавающей точкой с одной точностью . Его диапазон значений выходит за рамки этого обсуждения, но указан в разделе "Типы, форматы и значения плавающей запятой" Спецификации языка Java. Как и в случае рекомендаций для байтов и коротких, используйте float (вместо double), если вам нужно сохранить память в больших массивах чисел с плавающей запятой. Этот тип данных никогда не должен использоваться для точных значений, таких как валюта.


ВОЗМОЖНОСТЬ КОДА

Кроме того, это прояснит ваш ум и ваш код, скажем, у вас есть переменная, представляющая идентификатор объекта, этот идентификатор объекта никогда не будет использовать десятичные знаки, поэтому, если вы видите в своем коде:

int id;

вы точно знаете, как будет выглядеть этот идентификатор, иначе

double id;

обыкновение.

Кроме того, если вы видите:

int quantity;
double price;

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

Ответ 2

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

Вы также должны знать следующее:

byte = 1 byte
short = 2 bytes
int = 4 bytes
long = 8 bytes

Таким образом, использование переменной long означает, что вы выделяете ей 8 bytes.

Что-то вроде,

long var = 1000L

не показывает эффективного использования памяти. Что, если вы получили ГБ ОЗУ в эти дни, не означает, что мы должны тратить его впустую.

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

Ответ 3

Производительность в памяти и скорость сделали бы long дорогим.

Однако есть еще одно преимущество int: он слишком легко смешивается с подвыражениями int и может потерять длинную информацию при неправильном объединении операций. Небольшой сдвиг слева от 50 на самом деле делает 18 и так далее. Использование только чисел с посттекстом L будет одной мерой. Кроме того, long может выполнять функцию захвата переполнения для умножения int и других таких операций, где для длительного обнаружения переполнения все, что вы можете сделать.

Обратите внимание, что для int "все" операции байта и короткого сообщения распространяются на int.