为什么不对所有整数值使用long

时间:2015-09-16 12:06:49

标签: java integer long-integer

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

  • byte
  • short
  • int
  • long

由于long数据类型包含的位数最多,因此仅使用long数据类型来避免限制是否有意义?

问题

  • 仅使用long数据类型是否有特殊缺点?
  • 使用int数据类型而不是long数据类型是否有意义?

3 个答案:

答案 0 :(得分:7)

  

使用int数据类型而不是long数据类型是否有意义?

绝对是。

存储/磁盘使用

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

检查this question for further info

同时期待Oracle primitive type documentation您可以看到一些建议和内存使用情况:

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位有符号二进制补码整数,其最小值为-2³¹,最大值为2³¹-1。在Java SE 8及更高版本中,您可以使用int数据类型来表示无符号32位整数,其最小值为0,最大值为2³²-1。

long

  

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

float

  

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

代码可读性

另外,它会澄清你的想法和你的代码,比方说,你有一个表示对象ID的变量,这个对象ID永远不会使用小数,所以,如果你在代码中看到:

int id;

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

double id;

不会

另外,如果您看到:

int quantity;
double price;

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

答案 1 :(得分:1)

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

您也必须了解以下内容:

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

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

类似的东西,

long var = 1000L

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

我想做的简单点是,更有效地使用内存,应用程序会更快。

答案 2 :(得分:0)

内存需求和速度方面的性能会使long变得昂贵。

然而,int还有一个优势:一个很容易与int子表达式混合,并且在组合操作错误时可能会丢失长信息。 50左右的位移实际上是18,依此类推。仅使用带有L后缀的数字将是一种衡量标准。同样long可以作为int乘法和其他此类操作的溢出捕获,其中长期检测溢出就是你所能做的。

请注意,对于int,“字节和短字的所有”操作都会传播到int