为什么每次 long 和 double 工作时 Java 中有这么多类型的数字?

RTa*_*son 1 java double int var long-integer

现在我一直在尝试学习 Java 编程,我想知道我们为什么要使用诸如Float, 之类的东西short,以及int何时可以只使用LongDouble

我不明白那部分。

Sup*_*tar 5

很好的问题,特别是如果你来自像这样的语言 JavaScript不区分数字类型的。

Java 比那些语言要严格一些,你写的所有东西首先被编译成所谓的字节码,有点像汇编语言,但它只能被 Java 虚拟机 (JVM) 读取。因此,您必须准确指定表示数据所需的位数。即使使用更抽象的概念,如String,它仍然会成为 JVM 可以读取的代码,并准确说明它代表多少位。

以下是它在 Java 中的分解方式:

  • byte= 1 字节,有符号 = 1 个符号位和 7 个幅度位(在 Wikipedia 上阅读更多信息
  • short = 2 个字节,有符号 = 1 个符号位和 15 个幅度位
  • int = 4 字节,有符号 = 1 个符号位和 31 个幅度位
  • long = 8 字节,有符号 = 1 个符号位和 63 个幅度位
  • float= 4 个字节,有符号 = 1 个符号位,8 个指数位,23 个尾数位(在 Wikipedia 上阅读更多信息
  • double = 8 个字节,有符号 = 1 个符号位,11 个指数位,52 个尾数位
  • char = 2 个字节,无符号 = 16 个幅度位
  • boolean = 1 字节,无符号 = 8 位
  • booleanbooleans = 1 个半字节 = 4 位的数组中

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

还有这些Title-Case类,Java 有时会使用这些类来包装原语(包装是当您使用类来表示类内部的对象时,例如购买平板电脑并将其放入盒子中。您只关心平板电脑,但是你得到它周围的盒子来临时代表和握住它)。这些如下:

  • Byte 包裹 byte
  • Short 包裹 short
  • Integer 包裹 int
  • Long 包裹 long
  • Float 包裹 float
  • Double 包裹 double
  • Character 包裹 char
  • Boolean 包裹 boolean
  • Number作为一个通用的号码,并且可以是ByteShortIntegerLongFloatDouble,或自定义相同数目BigInteger。您甚至可以使用它来制作自己的数字!

概括

您绝对可以使用doublelong为您的所有号码!但是,当您处理如此多的数字时(请记住:Java 中的所有内容实际上都归结为数字),您应该使用尽可能少的数据来完成一项任务,以免内存不足。

这是一种即使像 Google 这样的大公司也使用的做法,正如我们在江南 Style 的视图计数器超过 的限制时int所看到的那样,这表明他们最初更喜欢仅使用 32 位数字作为计数器而不是一个 64 位的。但是,现在他们需要它,他们更新了。这是我建议您采用的做法!