Long vs Integer,long vs int,使用什么以及何时使用?

时间:2011-05-02 13:36:06

标签: java types numbers

有时我会看到使用longLongintInteger的API,我无法确定如何做出决定?

我什么时候应该选择什么?

7 个答案:

答案 0 :(得分:171)

LongObject的{​​{1}}形式,longInteger的对象形式。

int使用64 bitslong使用32位,因此只能容纳高达±20亿的数字(-2 31 到+2 31 -1)。

您应该使用intlong,除非您需要使用从int继承的方法,例如Objecthashcode方法通常使用盒装(Java.util.collections - 包装)版本,因为它们需要适用于任何Object和基本类型,例如Object或{{1} },不是int

另一个区别是,longObject按值传递,而longint传递 - 与所有非原始Java类型一样,按引用值。因此,如果可以修改LongInteger(它不是,它们在不使用JNI代码的情况下是不可变的),那么另一个原因就是使用一个而不是另一个。

最后的区别是LongInteger可能是Long

答案 1 :(得分:25)

对于原始类型,有几件事你无法做到:

  • 拥有null
  • 同步它们
  • 将它们用作泛型类的类型参数,并与之相关:
  • 将它们传递给与Object s
  • 一起使用的API

除非您需要其中任何一种,否则您应该更喜欢原始类型,因为它们需要更少的内存。

答案 2 :(得分:18)

  • 默认情况下,在持有数字时使用int
  • 如果int的范围太小,请使用long
  • 如果long的范围太小,请使用BigInteger
  • 如果您需要将数字作为对象处理(例如,将它们放入Collection,处理null,...),请使用Integer / Long代替

答案 3 :(得分:12)

int是32位整数; long是64位整数。使用哪一个取决于您期望使用的数字的大小。

intlong是原始类型,而IntegerLong是对象。原始类型更有效,但有时您需要使用对象;例如,Java的集合类只能用于对象,所以如果你需要一个整数列表,你必须使它成为List<Integer>(你不能在{{1}中使用int直接)。

答案 4 :(得分:2)

整数是带符号的32位整数类型

  • 表示为 Int
  • 大小= 32 bits (4byte)
  • 可以容纳范围为 -2,147,483,648 to 2,147,483,647
  • 的整数
  • 默认值为 0


是带符号的64位整数类型

  • 表示为 Long
  • 大小= 64 bits (8byte)
  • 可以容纳范围为 -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807
  • 的整数
  • 默认值为 0L


如果您使用的变量在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之间切换而不需要任何额外的转换(LongDoubleShort也相同)

您可以一直使用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

  • byte,char .. 1B .. 8b
  • short int .. 2B .. 16b
  • int .. .. .. .. 4B .. 32b
  • long int .. 8B .. 64b

C ..只是混乱:https://en.wikipedia.org/wiki/C_data_types

  • 短.. .. 16b
  • int .. .. .. 16b ... wtf?!?!
  • long .. .. 32b
  • 长长的.. 64b ..一团糟! : - /