有时候我看到 API 使用 long或者 Long或者 int或者 Integer,我不知道是如何决定的?
long
Long
int
Integer
我什么时候该选择什么?
Long是 long的 Object形式,Integer是 int的对象形式。
Object
long使用 64位。int使用32位,因此最多只能容纳 ± 20亿个数字(-231到 + 231-1)。
您应该使用 long和 int,除非需要使用从 Object继承的方法,例如 hashcode。Java.util.collections方法通常使用盒装的(Object包装的)版本,因为它们需要为任何 Object工作,而基元类型(如 int或 long)不是 Object。
hashcode
Java.util.collections
另一个区别是 long和 int是 按值传递(pass-by-value),而 Long和 Integer是 按引用传递值,就像所有非原始 Java 类型一样。因此,如果有可能修改 Long或 Integer(不可能,它们不使用 JNI 代码是不可变的) ,那么就有另一个理由使用其中一个而不是另一个。
最后一个区别是 Long或 Integer可以是 null。
null
有些事情你不能用原始类型来做:
除非您需要这些类型中的任何一种,否则您应该更喜欢基元类型,因为它们需要更少的内存。
BigInteger
Collection
int是一个32位整数; long是一个64位整数。使用哪一个取决于您希望处理的数字有多大。
int和 long是基元类型,而 Integer和 Long是对象。基本类型效率更高,但有时需要使用对象; 例如,Java 的集合类只能处理对象,所以如果需要一个整数列表,就必须将其设置为 List<Integer>(不能在 List中直接使用 int)。
List<Integer>
List
当需要使用一个可能超过32位的非常长的数来表示时,可以使用 long 来确保不会出现奇怪的行为。
从 Java5开始,您可以使用装箱和装箱特性来使 int 和 Integer 的使用完全相同。这意味着你可以:
int myInt = new Integer(11); Integer myInt2 = myInt;
进出装箱允许您在 int 和 Integer 之间切换,而不需要任何额外的转换(对于 Long、 Double和 Short也是一样的)
Double
Short
您可以一直使用 int,但是 Integer包含一些帮助器方法,它们可以帮助您使用整数(比如 Integer.parseInt(String))执行一些复杂的操作
Integer.parseInt(String)
A)对象类“ Long”与基元类型“ Long”(至少在 Java 中)
B)基本类型有不同(甚至不清楚)的内存大小:
Java-一切正常: https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html
混乱: https://en.wikipedia.org/wiki/C_data_types
Int
32 bits (4byte)
-2,147,483,648 to 2,147,483,647
64 bits (8byte)
-9,223,372,036,854,775,808 to 9,223,372,036,854,775,807
YouTube 就是一个选择其中一个的例子。他们首先将视频浏览计数器定义为一个 int,当一个流行视频的浏览量超过2,147,483,647次时,这个 int就会溢出。由于 Int计数器不能存储超过其范围的任何值,YouTube 将该计数器更改为64位变量,现在可以计算9223372036854775807浏览量。理解你的数据并选择适合的类型,因为 < strong > 64位变量比32位变量占用双倍的内存。