有时我会看到使用long
或Long
或int
或Integer
的API,我无法确定如何做出决定?
我什么时候应该选择什么?
答案 0 :(得分:171)
Long
是Object
的{{1}}形式,long
是Integer
的对象形式。
int
使用64 bits。 long
使用32位,因此只能容纳高达±20亿的数字(-2 31 到+2 31 -1)。
您应该使用int
和long
,除非您需要使用从int
继承的方法,例如Object
。 hashcode
方法通常使用盒装(Java.util.collections
- 包装)版本,因为它们需要适用于任何Object
和基本类型,例如Object
或{{1} },不是int
。
另一个区别是,long
和Object
是按值传递,而long
和int
是传递 - 与所有非原始Java类型一样,按引用值。因此,如果可以修改Long
或Integer
(它不是,它们在不使用JNI代码的情况下是不可变的),那么另一个原因就是使用一个而不是另一个。
最后的区别是Long
或Integer
可能是Long
。
答案 1 :(得分:25)
对于原始类型,有几件事你无法做到:
null
值Object
s 除非您需要其中任何一种,否则您应该更喜欢原始类型,因为它们需要更少的内存。
答案 2 :(得分:18)
int
。int
的范围太小,请使用long
long
的范围太小,请使用BigInteger
Collection
,处理null
,...),请使用Integer
/ Long
代替答案 3 :(得分:12)
int
是32位整数; long
是64位整数。使用哪一个取决于您期望使用的数字的大小。
int
和long
是原始类型,而Integer
和Long
是对象。原始类型更有效,但有时您需要使用对象;例如,Java的集合类只能用于对象,所以如果你需要一个整数列表,你必须使它成为List<Integer>
(你不能在{{1}中使用int
直接)。
答案 4 :(得分:2)
Int
32 bits (4byte)
-2,147,483,648 to 2,147,483,647
Long
64 bits (8byte)
-9,223,372,036,854,775,808 to 9,223,372,036,854,775,807
如果您使用的变量在32位范围内,请使用Int
,否则请使用long
。通常将long用于科学计算,诸如此类的东西需要很高的准确性。 (例如pi的值)。
YouTube的一个例子。他们首先将视频观看次数计数器定义为
int
,当观看到流行视频的观看次数超过2,147,483,647时,该计数器就会溢出。由于Int
计数器存储的值不能超过其范围,因此YouTube将计数器更改为64位变量,现在最多可以计数9,223,372,036,854,775,807次观看。了解您的数据并选择适合的类型,因为 64位变量将比32位变量占用两倍的内存。
答案 5 :(得分:1)
当使用可能超过32位的超长数字来表示时,您可以使用很长时间来确保您不会有奇怪的行为。
从Java 5开始,您可以使用in-boxing和out-boxing功能来完全使用int和Integer。这意味着你可以这样做:
int myInt = new Integer(11);
Integer myInt2 = myInt;
in and out boxing允许你在int和Integer之间切换而不需要任何额外的转换(Long
,Double
,Short
也相同)
您可以一直使用int
,但Integer
包含一些帮助您使用整数执行某些复杂操作的辅助方法(例如Integer.parseInt(String)
)
答案 6 :(得分:0)
a)对象类&#34;长&#34;与原始类型&#34;长&#34;。 (至少在Java中)
b)原始类型有不同的(甚至不清楚的)内存大小:
Java - 全部清除:https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html
C ..只是混乱:https://en.wikipedia.org/wiki/C_data_types