【问题标题】:Why are there so many types of number in Java when long and double work every time?为什么每次都是 long 和 double 工作时,Java 中有这么多类型的数字?
【发布时间】:2015-04-18 23:09:36
【问题描述】:
现在我一直在努力学习 Java 编程,我想知道为什么我们使用 Float、short 和 int 之类的东西,而我们可能只是使用 Long 和 Double?
我不明白那部分。
【问题讨论】:
标签:
java
int
double
long-integer
var
【解决方案1】:
很好的问题,特别是如果您来自像 JavaScript 这样不区分数字类型的语言。
Java 比那些语言更严格一些,你写的所有东西都首先被编译成所谓的字节码,这有点像汇编语言,但它只能被 Java 虚拟机 (JVM) 读取。因此,您必须准确指定表示数据所需的位数。即使使用像 String 这样更抽象的概念,它仍然会变成 JVM 可以读取的代码,它会准确说明它代表多少位。
这是它在 Java 中的分解方式:
-
byte = 1 字节,有符号 = 1 个符号位和 7 个幅度位 (Read more on Wikipedia)
-
short = 2 字节,有符号 = 1 个符号位和 15 个幅度位
-
int = 4 字节,有符号 = 1 个符号位和 31 个幅度位
-
long = 8 字节,有符号 = 1 个符号位和 63 个幅度位
-
float = 4 字节,有符号 = 1 个符号位,8 个指数位,23 个尾数位 (Read more on Wikipedia)
-
double = 8 字节,有符号 = 1 个符号位,11 个指数位,52 个尾数位
-
char = 2 字节,无符号 = 16 幅度位
-
boolean = 1 字节,无符号 = 8 位
-
boolean 在 booleans 的数组中 = 1 个半字节 = 4 位
请注意,这些都是小写。这意味着它们是原语,并且与数组一起构成了Java 中所有数据的构建块。
还有这些 Title-Case 类,Java 有时会使用这些类来包装原语(包装是当您使用类来表示类中的对象时,例如购买平板电脑并将其放入盒子。你只关心平板电脑,但你让它周围的盒子暂时代表和持有它)。它们如下:
-
Byte 包装 byte
-
Short 包装 short
-
Integer 包装 int
-
Long 包装 long
-
Float 包装 float
-
Double 包装 double
-
Character 包装 char
-
Boolean 包裹 boolean
-
Number 充当通用编号,可以是 Byte、Short、Integer、Long、Float、Double 或自定义编号,如 BigInteger。您甚至可以使用它来制作自己的号码!
总结
您绝对可以将double 和long 用于您的所有号码!但是,当您处理如此多的数字时(请记住:Java 中的所有内容实际上都归结为数字),您应该使用尽可能少的数据来完成一项任务,这样您就不会耗尽内存.
即使像 Google 这样的大公司也使用这种做法,正如我们所见 when the view counter for Gangnam Style surpassed the limit of an int,表明他们最初更喜欢只使用 32 位数字而不是 64 位数字作为计数器。不过,既然他们需要它,他们就更新了。我建议您采用这种做法!
【解决方案2】:
如果您知道要保存的数据的范围,那么使用可以保存它的尽可能小的原始数据类型是有意义的。这总是比分配比您需要的更多的内存更有效。
【解决方案3】:
欢迎来到 Java 编程。
首先点击键盘上的插入键来切换块光标。
不应将数据类型视为它消耗的存储量,而应将其视为它为该类型的变量和表达式定义的行为 - Java 完整参考
因此,通过选择正确的数据类型,您可以指定其行为或界限。注意:简而言之,byte 可能并不总是在内存中高效,因为它们很可能在计算过程中被转换为 int。