我对何时使用什么原语感到有点困惑。如果我要定义一个数字,我如何知道使用byte
,short
,int
或long
?我知道它们是不同的字节,但这是否意味着我只能将其中一个用于某个数字?
如此简单,我的问题是,我何时使用上面列出的四个原语中的每一个?
答案 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的内存,但除了具有特定字节对齐的序列化以外,还没有特别有用。
这是否意味着我只能将其中一个用于某个数字?
不,你可以使用足够大的任何一个来处理这个数字。当然,十进制值需要double
或float
- 双精度通常是理想的,因为它具有更高的精度和一些缺点。但是,某些库(例如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)
为了使用原语,您需要知道存储在其中的数字的数据范围。这在很大程度上取决于你正在建模的东西:
byte
short
int
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
适用于大多数情况,但如果需要关注内存,则可以使用byte
或short
,如果需要,可以使用long
更大的价值。
尝试编写一个小测试程序。如果在这些类型的变量之一中放置一个太大的值,会发生什么?
来源:https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html
答案 4 :(得分:2)
一般指导肯定应该是:如果您没有任何理由选择特定原语,选择int 。
这至少有三个好处:
那说如果你有一个包含数百万个元素的数组,你肯定应该弄清楚原语是否适合输入范围 - 我将引用你的其他答案来总结每个元素的大小。
答案 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
字符字符。
希望这个答案可以帮到你。