在 Java 中使用什么原语
What Primitive To Use In Java
我对什么时候使用什么原语有点困惑。如果我要定义一个数字,我怎么知道要使用 byte
、short
、int
或 long
?我知道它们是不同的字节,但这是否意味着我只能将其中一个用于某个数字?
很简单,我的问题是,我什么时候使用上面列出的四种原语中的每一种?
一个字节可以是-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?
不,您可以使用任何足够大的来处理这个数字。当然,十进制值需要 double
或 float
——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
在大多数情况下都可以,但如果内存不足,您可以使用 byte
或 short
,如果内存不足,则可以使用 long
你需要更大的值。
尝试编写一个小测试程序。当您在这些类型的变量之一中输入太大的值时会发生什么?
来源:https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html
一般指导绝对应该是:如果您没有任何充分理由选择特定基元,选择 int。
这至少有三个优点:
- 每一种算术或逻辑运算都会return一个int。因此,如果您使用更小的东西,您将不得不进行大量转换才能实际分配值。
- 这是 "some number" 的公认标准。如果你选择其他任何东西,其他开发人员会想知道原因。
- 这将是最有效的,尽管使用其他任何方法的性能差异可能很小。
就是说,如果您有一个包含数百万个元素的数组,是的,您绝对应该找出适合输入范围的基元 - 我建议您参考其他答案以了解每个元素的大小。
@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
字符的字符。
希望这个回答对您有所帮助。
我对什么时候使用什么原语有点困惑。如果我要定义一个数字,我怎么知道要使用 byte
、short
、int
或 long
?我知道它们是不同的字节,但这是否意味着我只能将其中一个用于某个数字?
很简单,我的问题是,我什么时候使用上面列出的四种原语中的每一种?
一个字节可以是-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?
不,您可以使用任何足够大的来处理这个数字。当然,十进制值需要 double
或 float
——double 通常是理想的,因为它具有更高的精度和很少的缺点。但是,某些库(例如 3D 绘图)可能会使用浮点数。请记住,您可以转换数字类型(例如 (byte) someInt
或 (float) functionReturningADouble();
为了使用基元,您需要知道存储在其中的数字的数据范围。这在很大程度上取决于您建模的对象:
- 当您的号码在 [-128..127] 范围内时使用
- 当您的号码在 [-32768..32767] 范围内时使用
- 当您的号码在 [-231..231-1][ 范围内时使用
int
=33=] - 当您的号码在[-263..263-1][范围内时使用
long
byte
short
此外,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
在大多数情况下都可以,但如果内存不足,您可以使用 byte
或 short
,如果内存不足,则可以使用 long
你需要更大的值。
尝试编写一个小测试程序。当您在这些类型的变量之一中输入太大的值时会发生什么?
来源:https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html
一般指导绝对应该是:如果您没有任何充分理由选择特定基元,选择 int。
这至少有三个优点:
- 每一种算术或逻辑运算都会return一个int。因此,如果您使用更小的东西,您将不得不进行大量转换才能实际分配值。
- 这是 "some number" 的公认标准。如果你选择其他任何东西,其他开发人员会想知道原因。
- 这将是最有效的,尽管使用其他任何方法的性能差异可能很小。
就是说,如果您有一个包含数百万个元素的数组,是的,您绝对应该找出适合输入范围的基元 - 我建议您参考其他答案以了解每个元素的大小。
@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
字符的字符。
希望这个回答对您有所帮助。