为什么每次long和double工作的时候Java里面的数字类型那么多?
Why are there so many types of number in Java when long and double work every time?
现在我一直在努力学习Java编程,我想知道为什么我们可以使用Float
、short
和int
之类的东西只是在使用 Long
和 Double
?
我不明白那部分。
如果您知道要保存的数据的边界,那么使用可以保存它的尽可能小的原始数据类型是有意义的。这总是比分配超出您需要的内存更有效。
欢迎使用 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 位
boolean
在 boolean
s = 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
作为通用数字,可以是 Byte
、Short
、Integer
、Long
、Float
、 Double
,或像 BigInteger
这样的自定义数字。你甚至可以用它来制作你自己的号码!
总结
您完全可以只使用 double
和 long
来表示所有号码!但是,当你处理如此多的数字时(记住:Java 中的所有内容都归结为数字),你应该使用尽可能少的数据来完成一项任务,这样你就不会't 运行 内存不足。
这种做法甚至像 Google 这样的大公司也会使用,正如我们所见 when the view counter for Gangnam Style surpassed the limit of an int
,表明他们一开始更喜欢只使用 32 位数字作为计数器而不是 64 位的。不过,既然他们需要它,他们就会更新。这是我建议你采用的做法!
现在我一直在努力学习Java编程,我想知道为什么我们可以使用Float
、short
和int
之类的东西只是在使用 Long
和 Double
?
我不明白那部分。
如果您知道要保存的数据的边界,那么使用可以保存它的尽可能小的原始数据类型是有意义的。这总是比分配超出您需要的内存更有效。
欢迎使用 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 位boolean
在boolean
s = 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
作为通用数字,可以是Byte
、Short
、Integer
、Long
、Float
、Double
,或像BigInteger
这样的自定义数字。你甚至可以用它来制作你自己的号码!
总结
您完全可以只使用 double
和 long
来表示所有号码!但是,当你处理如此多的数字时(记住:Java 中的所有内容都归结为数字),你应该使用尽可能少的数据来完成一项任务,这样你就不会't 运行 内存不足。
这种做法甚至像 Google 这样的大公司也会使用,正如我们所见 when the view counter for Gangnam Style surpassed the limit of an int
,表明他们一开始更喜欢只使用 32 位数字作为计数器而不是 64 位的。不过,既然他们需要它,他们就会更新。这是我建议你采用的做法!