在 Java 中使用什么原语

What Primitive To Use In Java

我对什么时候使用什么原语有点困惑。如果我要定义一个数字,我怎么知道要使用 byteshortintlong?我知道它们是不同的字节,但这是否意味着我只能将其中一个用于某个数字?

很简单,我的问题是,我什么时候使用上面列出的四种原语中的每一种?

一个字节可以是-128到127之间的数字

short 可以是 -32,768 到 32,767 之间的数字

整数可以是 -2^32 到 2^32 - 1

多头是 -2^63 到 2^63 - 1

通常,除非 space 是个问题,否则 int 没问题。

If I am lets say defining a number, how do I know what to use byte, short, int, or long?

取决于您的用例。使用 int 而不是 short 并没有太大的损失,除非你有数十亿个数字。只需考虑一个变量可能使用的范围。在大多数情况下,使用 int 是合理的,其范围是 -2,147,483,648 到 2,147,483,647,而 long 处理 +/- 9.22337204*1018[=29= 范围内的数字].如果您不确定,long 不会造成特别的伤害。

您可能想要专门使用 byte 的唯一原因是,如果您正在存储字节数据(例如文件的一部分),或者正在执行网络通信或序列化之类的操作,其中字节数很重要。请记住 Java 的字节也有符号(-128 到 127)。简而言之 - 可能有助于为十亿元素数组节省 2GB 内存,但除了具有特定字节对齐的序列化之外没有特别有用的。

does that mean that I can only use one of them for a certain number?

不,您可以使用任何足够大的来处理这个数字。当然,十进制值需要 doublefloat——double 通常是理想的,因为它具有更高的精度和很少的缺点。但是,某些库(例如 3D 绘图)可能会使用浮点数。请记住,您可以转换数字类型(例如 (byte) someInt(float) functionReturningADouble();

为了使用基元,您需要知道存储在其中的数字的数据范围。这在很大程度上取决于您建模的对象:

  • 当您的号码在 [-128..127]
  • 范围内时使用 byte
  • 当您的号码在 [-32768..32767]
  • 范围内时使用 short
  • 当您的号码在 [-231..231-1][ 范围内时使用 int =33=]
  • 当您的号码在[-263..263-1][范围内时使用long

此外,byte数据类型用于表示"raw"二进制数据,在这种情况下不能像数字一样使用。

当你想要无限范围时,使用BigInteger。这种灵活性是有代价的:BigInteger 上的操作比基元上的相同操作要昂贵几个数量级。

您知道您的变量可能持有什么值吗?

如果它介于 -128 和 127 之间,请使用 byte

如果它介于 -32,768 和 32,767 之间,请使用 short

如果它介于 -2^32 和 2^32 - 1 之间,请使用 int.

如果介于 -2^63 和 2^63 - 1 之间,请使用 long.

一般来说,int 在大多数情况下都可以,但如果内存不足,您可以使用 byteshort,如果内存不足,则可以使用 long你需要更大的值。

尝试编写一个小测试程序。当您在这些类型的变量之一中输入太大的值时会发生什么?

来源:https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html

另请参阅:the year 2038 problem

一般指导绝对应该是:如果您没有任何充分理由选择特定基元,选择 int

这至少有三个优点:

  1. 每一种算术或逻辑运算都会return一个int。因此,如果您使用更小的东西,您将不得不进行大量转换才能实际分配值。
  2. 这是 "some number" 的公认标准。如果你选择其他任何东西,其他开发人员会想知道原因。
  3. 这将是最有效的,尽管使用其他任何方法的性能差异可能很小。

就是说,如果您有一个包含数百万个元素的数组,是的,您绝对应该找出适合输入范围的基元 - 我建议您参考其他答案以了解每个元素的大小。

@dasblinkenlight

当您为大型项目工作时,您需要针对每个需求优化代码。显然你会减少项目占用的内存。

因此,使用 int、short、long、byte 在优化内存方面起着至关重要的作用。当整数为 1 位时,您可以使用 int 或 short 声明整数,但技术上您仍然可以选择 long、float 和 double,但要成为一名优秀的程序员,您可以尝试遵循标准。

字节 - 8 位。所以它可以保存从 -128 到 127 的值。

short:它是 32 位的。所以 -32,768 和最大值 32,767

Long- 64 位。 -2(幂)63 和最大值 2(幂)63-1 float 和 double- 表示大的十进制值。

是或否决策的布尔值 - 可以包含值 1 或 0

字符的字符。

希望这个回答对您有所帮助。