长与整数,长与整数,什么使用和什么时候?
有时我看到API使用long
或Long
或int
或Integer
,我不知道如何做出这个决定?
我应该什么时候select什么?
Long
是long
的Object
forms, Integer
是int
的对象forms。
long
使用64位 。 int
使用32位,因此只能保存数字高达±20亿(-2 31到+2 31 -1)。
你应该使用long
和int
,除非你需要使用从Object
inheritance的方法,比如hashcode
。 Java.util.collections
方法通常使用盒装( Object
包装)版本,因为它们需要为任何Object
工作,并且像int
或long
这样的基本types不是Object
。
另一个区别是long
和int
是按值传递的 ,而Long
和Integer
是通过引用的值 ,就像所有非原始Javatypes一样。 所以如果可以修改一个Long
或Integer
(不是,它们是不可变的,而不使用JNI代码),那么还有另外一个原因。
最后的区别是Long
或Integer
可能为null
。
有一些你不能用原始types做的事情:
- 有一个
null
值 - 在它们上同步
- 将它们用作generics类的types参数,并与之相关:
- 将它们传递给与
Object
一起使用的API
除非你需要这些,否则你应该更喜欢原始types,因为它们需要更less的内存。
- 默认情况下使用一个
int
,当持有号码。 - 如果
int
的范围太小,请使用long
- 如果
long
的范围太小,请使用BigInteger
- 如果你需要处理你的数字作为对象(例如,当把它们放入一个
Collection
,处理null
,…)使用Integer
/Long
Integer
int
是一个32位的整数; 一个long
是一个64位的整数。 使用哪一个取决于您希望使用的数字的大小。
int
和long
是原始types,而Integer
和Long
是对象。 原始types更高效,但有时需要使用对象; 例如,Java的集合类只能与对象一起工作,所以如果你需要一个整数列表,你必须使它成为一个List<Integer>
,例如(你不能直接在List
使用int
)。
当涉及到使用可能超过32位的很长的数字时,可能需要很长时间才能确保不会有奇怪的行为。
从Java 5开始,你可以使用in-boxing和out-boxing特性来使int和Integer的使用完全相同。 这意味着你可以这样做:
int myInt = new Integer(11); Integer myInt2 = myInt;
input和输出框允许你在int和Integer之间切换而不需要额外的转换( Long
, Double
, Short
也一样)
您可以一直使用int
,但Integer
包含一些帮助器方法,可以帮助您使用整数执行一些复杂的操作(如Integer.parseInt(String)
)