为什么每次long和double工作的时候Java里面的数字类型那么多?

Why are there so many types of number in Java when long and double work every time?

现在我一直在努力学习Java编程,我想知道为什么我们可以使用Floatshortint之类的东西只是在使用 LongDouble?

我不明白那部分。

如果您知道要保存的数据的边界,那么使用可以保存它的尽可能小的原始数据类型是有意义的。这总是比分配超出您需要的内存更有效。

欢迎使用 Java 编程。 首先,点击键盘上的 Insert 键以切换出块光标。

不应将数据类型视为它消耗的存储量,而应将其视为它为该类型的变量和表达式定义的行为 - Java 完整引用

因此,通过选择正确的数据类型,您可以指定其行为或范围。注意:简而言之,byte 可能不是内存高效的,因为它们在内部很可能在计算过程中被转换为 int。

问得好,特别是如果您来自 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 位
  • booleanbooleans = 1 个半字节 = 4 位
  • 的数组中

注意这些都是小写。这意味着它们是原始,并且与数组一起构成Java中所有数据的构建块。

还有这些 Title-Case classes Java 有时用于包装基元(包装是当您使用 class 来表示class里面的一个对象,就像买了一个平板电脑,拿到盒子里,你只关心平板电脑,却得到了它周围的盒子,暂时代表和持有它)。这些如下:

  • Byte 换行 byte
  • Short 换行 short
  • Integer 换行 int
  • Long 换行 long
  • Float 换行 float
  • Double 换行 double
  • Character 换行 char
  • Boolean 换行 boolean
  • Number 作为通用数字,可以是 ByteShortIntegerLongFloatDouble,或像 BigInteger 这样的自定义数字。你甚至可以用它来制作你自己的号码!

总结

您完全可以只使用 doublelong 来表示所有号码!但是,当你处理如此多的数字时(记住:Java 中的所有内容都归结为数字),你应该使用尽可能少的数据来完成一项任务,这样你就不会't 运行 内存不足。

这种做法甚至像 Google 这样的大公司也会使用,正如我们所见 when the view counter for Gangnam Style surpassed the limit of an int,表明他们一开始更喜欢只使用 32 位数字作为计数器而不是 64 位的。不过,既然他们需要它,他们就会更新。这是我建议你采用的做法!