为什么Java中没有字节或短文字?
我可以创build一个字面长的附加一个L值; 为什么我不能以某种类似的方式创build一个字面的短或字节? 为什么我需要使用一个inttypes的文字?
如果答案是“因为C中没有短文字”,那么为什么C中没有短文字?
这实际上并没有以任何有意义的方式影响我的生活。 写(短)0而不是0S或者什么是很容易的。 但不一致使我好奇; 当你深夜起来的时候,这是困扰你的事情之一。 有人在某个时候做出了一个devise决定,以便为某些原始typesinput文字,但不是为所有原始typesinput文字。 为什么?
在C语言中, int
至less意味着要有CPU的“自然”字长,而long
可能意味着“更大的自然”字大小(在最后一部分中不确定,但它也能解释为什么int
和long
在x86上具有相同的大小)。
现在,我的猜测是:对于int
和long
int
,有一个自然的表示,它恰好与机器的寄存器完全一致。 然而,在大多数CPU上,在使用之前,较小的typesbyte
和short
将不得不被填充到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