2008-11-25 39 views
53

我可以創建一個字面長通過附加一個L值;爲什麼我不能以某種類似的方式創建文字短或字節?爲什麼我需要使用一個int型文字和一個強制轉換?爲什麼Java中沒有字節或短文字?

如果答案是「因爲C中沒有短文字」,那麼C爲什麼沒有短文字?

這實際上並沒有以任何有意義的方式影響我的生活;編寫(簡寫)0而不是0S或其他東西很容易。但不一致使我好奇;當你在深夜起牀時,這是困擾你的事情之一。有人在某個時候做了一個設計決定,以便爲一些基本類型輸入文字,但不是爲所有這些類型輸入文字。爲什麼?

回答

15

在C,int至少是爲了有CPU和的「天然」二字大小long大概意思是「較大自然」字大小(在最後一部分不能肯定,但它也可以解釋爲什麼intlong在x86上具有相同的大小)。

現在,我的猜測是:對於intlong,有一個自然的表示,它完全符合機器的寄存器。但是在大多數CPU上,較小的類型byteshort必須在使用前填充到int。如果是這樣的話,你也可以有演員陣容。

8

我懷疑這是一個「除非真正增加價值才加上任何東西」的例子 - 而且它被認爲沒有足夠的價值增加價值。正如你所說的那樣,這很容易解決,坦率地說,它很少有必要(只是爲了消除歧義)。

在C#中也是如此,我從未特別錯過這兩種語言。我在Java中錯過的是一個無符號字節類型:)

+4

是的,請加無符號字節:(。手頭的問題,我認爲這是值得一提的還有很長的iteral因爲一個int文字不能表示一個long的所有值,但是int可以表示一個short的所有值。 – 2008-11-25 16:04:05

+0

但是我認爲它確實增加了值 - 不需要強制轉換可以是一個很大的優勢。簡短)(val + 10)`只是令人討厭,儘管Java也必須允許增加short才能工作。 – mjaggard 2013-04-26 09:34:10

5

另一個原因可能是JVM不知道短和字節。所有的計算和存儲都是通過JVM中的ints,longs,float和double進行的。

2

有幾件事情需要考慮。

1)如上所述,JVM沒有字節或短類型的概念。通常,這些類型不用於JVM級別的計算;所以人們可以認爲這些文字的使用會較少。

2)對於字節和短變量的初始化,如果int表達式是常量,並且在該類型的允許範圍內,它將隱式轉換爲目標類型。

3)人們總是可以投字面,前(短)10

相關問題