为什么不对所有整数值使用 long内存/磁盘使用情况代码可读性

2022-09-04 22:33:14

在我的Java类中,我们刚刚了解了以下每种基元数据类型:

  • byte
  • short
  • int
  • long

由于数据类型包含的位最多,因此以独占方式使用数据类型以避免限制难道没有意义吗?longlong

问题

  • 仅使用数据类型是否有特定的缺点?long
  • 例如,使用数据类型而不是数据类型是否有意义?intlong

答案 1

例如,使用数据类型而不是数据类型是否有意义?intlong

绝对是的。


内存/磁盘使用情况

仅使用一个或两个变量,您不会看到性能的差异,但是当应用程序增长时,它将提高您的应用程序速度。

请查看此问题以获取更多信息

此外,查看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(含)。与byte一样,相同的准则也适用:在内存节省实际很重要的情况下,您可以使用短路来节省大型数组中的内存

int:

默认情况下,int 数据类型是 32 位有符号二进制的补码整数,其最小值为 -2³¹,最大值为 2³¹-1。在 Java SE 8 及更高版本中,可以使用 int 数据类型来表示无符号的 32 位整数,其最小值为 0,最大值为 2³²-1。

long:

长整型数据类型是 64 位二进制补数。有符号长整型的最小值为 -2⁶³,最大值为 2⁶³-1。在 Java SE 8 及更高版本中,可以使用 long 数据类型来表示无符号的 64 位 long,其最小值为 0,最大值为 2⁶⁴-1。当您需要比 int 提供的值范围更宽的值范围时,请使用此数据类型

float:

浮点数据类型是单精度 32 位 IEEE 754 浮点。其值范围超出了本讨论的范围,但在 Java 语言规范的“浮点类型、格式和值”部分中指定。与字节和短整型的建议一样,如果您需要在大型浮点数数组中节省内存,请使用浮点数(而不是双精度)。此数据类型绝不能用于精确值,如货币。


代码可读性

此外,它将阐明你的思想和代码,假设你有一个表示对象ID的变量,这个对象ID永远不会使用小数,所以,如果你在代码中看到:

int id;

您现在将确定此ID的外观,否则

double id;

习惯。

此外,如果您看到:

int quantity;
double price;

你会知道不会允许小数(只有完整的对象),但价格会做...这让你的工作(和其他程序员会阅读你的代码)更容易。quantity


答案 2

除了Range(可以存储在任何特定数据类型中的最小值和最大值)之外,还有另一个方面,那就是变量。size

您还必须注意以下事项:

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

因此,使用变量意味着您正在为其分配内存。long8 bytes

像这样,

long var = 1000L

不显示内存的有效利用。如果你现在有GB的RAM并不意味着我们应该浪费它。

我想说的简单一点是,更有效地利用内存,更快的将是应用程序。