【发布时间】:2011-08-17 00:00:49
【问题描述】:
有时我看到 API 使用 long 或 Long 或 int 或 Integer,我不知道是如何做出决定的?
我应该什么时候选择?
【问题讨论】:
有时我看到 API 使用 long 或 Long 或 int 或 Integer,我不知道是如何做出决定的?
我应该什么时候选择?
【问题讨论】:
Long是long的Object形式,Integer是int的对象形式。
long 使用 64 bits。 int 使用 32 位,因此最多只能保存 ±20 亿的数字(-231 到 +231-1)。
您应该使用long 和int,除非您需要使用从Object 继承的方法,例如hashcode。 Java.util.collections 方法通常使用盒装 (Object-wrapped) 版本,因为它们需要适用于任何 Object,并且像 int 或 long 这样的原始类型不是 Object。
另一个区别是long 和int 是按值传递,而Long 和Integer 是按参考值传递 ,就像所有非原始 Java 类型一样。因此,如果可以修改 Long 或 Integer(不是,它们在不使用 JNI 代码的情况下是不可变的),那么还有另一个理由使用其中一个。
最后一个区别是Long 或Integer 可以是null。
【讨论】:
有几件事你不能用原始类型做:
null 值Objects 配合使用的 API除非您需要其中任何一种,否则您应该更喜欢原始类型,因为它们需要更少的内存。
【讨论】:
int,当持有号码时。int 的范围太小,请使用long
long的范围太小,使用BigInteger
Collection,处理 null,...)请改用 Integer/Long
【讨论】:
int 是一个 32 位整数; long 是一个 64 位整数。使用哪一个取决于您希望使用的数字有多大。
int 和 long 是原始类型,而 Integer 和 Long 是对象。原始类型效率更高,但有时需要使用对象;例如,Java 的集合类只能与对象一起使用,因此如果您需要整数列表,则必须将其设为 List<Integer>,例如(您不能在 List 中直接使用 int)。
【讨论】:
当涉及到使用可能超过 32 位的非常长的数字来表示时,您可以使用 long 来确保您不会出现奇怪的行为。
从 Java 5 开始,您可以使用 in-boxing 和 out-boxing 功能使 int 和 Integer 的使用完全一样。这意味着你可以这样做:
int myInt = new Integer(11);
Integer myInt2 = myInt;
in 和 out boxing 允许您在 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
【讨论】:
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 位变量占用两倍的内存。
【讨论】: