为什么Java中没有字节或短文字?

时间:2008-11-25 15:57:29

标签: java primitive

我可以通过在值上附加L来创建文字长度;为什么我不能以某种类似的方式创建文字短或字节?为什么我需要使用带有强制转换的int文字?

如果答案是“因为C中没有短文字”,那么为什么C中没有短文字?

这实际上并没有以任何有意义的方式影响我的生活;写(短)0而不是0S或其他东西很容易。但这种不一致让我很好奇;这是你晚上睡觉时困扰你的事情之一。有人在某个时候做出了一个设计决定,可以为某些原始类型输入文字,但不能为所有原始类型输入文字。为什么呢?

4 个答案:

答案 0 :(得分:15)

在C中,int至少意味着拥有CPU的“自然”字大小,long可能意味着“更大的自然”字大小(最后不确定)部分,但它也解释了为什么intlong在x86上具有相同的大小。)

现在,我的猜测是:对于intlong,有一个完全适合机器寄存器的自然表示。但是,在大多数CPU上,较小的byteshort类型必须在使用之前填充到int。如果是这样的话,你也可以有演员。

答案 1 :(得分:8)

我怀疑这是“除非真正增加价值,否则不要在语言中添加任何东西” - 并且它被视为增加了足够的价值而不值得。正如你所说的那样,很容易实现,坦率地说,无论如何都很少需要(仅限消除歧义)。

在C#中也是如此,我从来没有特别错过任何一种语言。我在Java中错过的是无符号字节类型:)

答案 2 :(得分:4)

另一个原因可能是JVM不知道short和byte。所有计算和存储都是使用JVM内的整数,长整数,浮点数和双精度进行的。

答案 3 :(得分:2)

有几件事需要考虑。

1)如上所述,JVM没有字节或短类型的概念。通常这些类型不用于JVM级别的计算;所以人们可以认为这些文字的使用会更少。

2)对于字节和短变量的初始化,如果int表达式是常量并且在类型的允许范围内,则它被隐式地转换为目标类型。

3)总是可以施放文字,前(短)10