在Java中使用什么原语

时间:2015-06-19 13:36:27

标签: java primitive primitive-types

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

如此简单,我的问题是,我何时使用上面列出的四个原语中的每一个?

6 个答案:

答案 0 :(得分:5)

  

如果我可以说定义一个数字,我怎么知道使用byte,short,int还是long?

取决于您的使用案例。除非您拥有数十亿的数字,否则使用int而非short不会受到巨大的惩罚。只需考虑变量可能使用的范围。在大多数情况下,使用int是合理的,其范围为-2,147,483,648到2,147,483,647,而long处理的数字范围为+/- 9.22337204 * 10 18 。如果你不确定,long不会特别受伤。

您可能特别想要使用byte的唯一原因是,如果要存储字节数据(如文件的某些部分),或者正在进行网络通信或序列化等操作,其中字节数很重要。请记住,Java的字节也是有符号的(-128到127)。同样简单 - 对于十亿个元素的数组来说可能有用的是节省2GB的内存,但除了具有特定字节对齐的序列化以外,还没有特别有用。

  

这是否意味着我只能将其中一个用于某个数字?

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

答案 1 :(得分:4)

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

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

int可以是-2 ^ 32到2 ^ 32 - 1

长是-2 ^ 63到2 ^ 63 - 1

通常除非空间是个问题,否则int就可以了。

答案 2 :(得分:3)

为了使用原语,您需要知道存储在其中的数字的数据范围。这在很大程度上取决于你正在建模的东西:

  • 当您的号码在[-128..127]
  • 范围内时,请使用byte
  • 当您的电话号码在[-32768..32767]
  • 范围内时使用short
  • 当您的电话号码在[-2 31 .. 2 31 -1]
  • 范围内时使用int
  • 当您的电话号码在[-2 63 .. 2 63 -1]
  • 范围内时使用long

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

如果您想要无限范围,请使用BigInteger。这种灵活性需要付出代价:BigInteger上的操作比基元上的相同操作要贵几个数量级。

答案 3 :(得分:3)

您知道您的变量可能包含哪些值吗?

如果介于-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

答案 4 :(得分:2)

一般指导肯定应该是:如果您没有任何理由选择特定原语,选择int

这至少有三个好处:

  1. 每种算术或逻辑运算都会返回一个int。因此,如果你使用任何更小的东西,你将不得不投入大量实际分配值。
  2. 它是"某些数字"的公认标准。如果您选择其他任何东西,其他开发人员会想知道原因。
  3. 这将是最有效的,尽管使用其他任何东西的性能差异可能是微不足道的。
  4. 那说如果你有一个包含数百万个元素的数组,你肯定应该弄清楚原语是否适合输入范围 - 我将引用你的其他答案来总结每个元素的大小。

答案 5 :(得分:0)

@dasblinkenlight

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

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

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

简短:它的32位。所以-32,768,最大值32,767

长 - 它的64位。 -2(功率)63和最大值2(功率)63-1 float和double-表示大的十进制值。

是或否decesions的布尔值 - 可以保存值1或0

字符字符。

希望这个答案可以帮到你。