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

我可以创build一个字面长的附加一个L值; 为什么我不能以某种类似的方式创build一个字面的短或字节? 为什么我需要使用一个inttypes的文字?

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

这实际上并没有以任何有意义的方式影响我的生活。 写(短)0而不是0S或者什么是很容易的。 但不一致使我好奇; 当你深夜起来的时候,这是困扰你的事情之一。 有人在某个时候做出了一个devise决定,以便为某些原始typesinput文字,但不是为所有原始typesinput文字。 为什么?

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

现在,我的猜测是:对于intlong int ,有一个自然的表示,它恰好与机器的寄存器完全一致。 然而,在大多数CPU上,在使用之前,较小的typesbyteshort将不得不被填充到int 。 如果是这样的话,你也可以有一个演员。

我怀疑这是一个“除非真正增加价值才加上任何东西”的例子 – 而且它被认为增加了足够的价值,不值得。 正如你所说,这很容易,坦率地说,这是很less有必要的(仅用于消除歧义)。

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

另一个原因可能是JVM不知道short和byte。 所有的计算和存储都是通过JVM中的ints,longs,float和double进行的。

有几件事情要考虑。

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

2)对于字节和短variables的初始化,如果intexpression式是常量,并且在该types的允许范围内,则隐式转换为目标types。

3)总是可以投射字面,前(短)10