long
或Long
或int
或Integer
,但我不知道该如何做出决策?什么情况下应该选择哪个?
Long
是 long
的对象形式,而 Integer
是 int
的对象形式。
long
使用 64 位。而 int
只使用 32 位,因此只能容纳 ±20亿范围内的数字(-231 到 +231-1)。
通常情况下应该使用 long
和 int
,除非需要使用从 Object
继承来的方法,例如 hashcode
。Java.util.collections
方法通常使用包装成对象的版本(即 Object
包装的版本),因为它们需要适用于任何 Object
,而基本类型,如 int
或 long
,不是一个 Object
。
另一个区别是,long
和 int
是按值传递,而 Long
和 Integer
是按引用值传递,就像所有非基本的 Java 类型一样。因此,如果有可能修改一个 Long
或 Integer
(实际上是不可能的,除非使用 JNI 代码),那么使用其中一个而不是另一个也将有另一个原因。
最后一个区别是,Long
或 Integer
可能为 null
。
int
。int
的范围过小,则使用long
long
的范围太小,则使用BigInteger
Collection
中,处理null
等),请改用Integer
/Long
原始类型有一些限制:
null
值Object
的 API除非需要上述功能之一,否则应优先选择原始类型,因为它们需要更少的内存。
Int
32位(4字节)
-2,147,483,648至2,147,483,647
范围内的整数Long
64位(8字节)
-9,223,372,036,854,775,808至9,223,372,036,854,775,807
范围内的整数选择其中之一的一个例子是YouTube的案例。他们最初将视频观看计数器定义为一个
int
,当一个流行视频获得超过2,147,483,647个观看时,它就会溢出。由于Int
计数器无法存储超过其范围的任何值,YouTube将计数器更改为64位变量,现在可以计算高达9,223,372,036,854,775,807次观看。了解你的数据并选择适合的类型,因为 64位变量将占用双倍的内存 比32位变量。
int
是32位整数;long
是64位整数。选用哪一个取决于您预计要处理的数字有多大。
int
和long
是原始数据类型,而Integer
和Long
是对象。原始数据类型更有效率,但有时需要使用对象;例如,Java的集合类只能使用对象,所以如果您需要整数列表,则必须将其设置为List<Integer>
,例如(不能直接在List
中使用int
)。
当需要使用超过32位的非常长的数字时,您可以使用long来确保不会出现奇怪的行为。
从Java 5开始,您可以使用装箱和拆箱功能使int和Integer的使用完全相同。这意味着您可以执行以下操作:
int myInt = new Integer(11);
Integer myInt2 = myInt;
内部装箱和拆箱允许您在int和Integer之间进行切换,无需任何额外的转换(对于Long
、Double
、Short
也是如此)
您可以始终使用int
,但Integer
包含一些帮助您执行一些复杂操作的辅助方法(例如Integer.parseInt(String)
)
a) 对象类"Long"与原始类型"long"的区别。(至少在Java中)
b) 原始类型有不同(甚至不清楚)的内存大小:
Java - 全部清晰: https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html
C .. 一团糟: https://en.wikipedia.org/wiki/C_data_types