我可以創建一個字面長通過附加一個L值;爲什麼我不能以某種類似的方式創建文字短或字節?爲什麼我需要使用一個int型文字和一個強制轉換?爲什麼Java中沒有字節或短文字?
如果答案是「因爲C中沒有短文字」,那麼C爲什麼沒有短文字?
這實際上並沒有以任何有意義的方式影響我的生活;編寫(簡寫)0而不是0S或其他東西很容易。但不一致使我好奇;當你在深夜起牀時,這是困擾你的事情之一。有人在某個時候做了一個設計決定,以便爲一些基本類型輸入文字,但不是爲所有這些類型輸入文字。爲什麼?
我可以創建一個字面長通過附加一個L值;爲什麼我不能以某種類似的方式創建文字短或字節?爲什麼我需要使用一個int型文字和一個強制轉換?爲什麼Java中沒有字節或短文字?
如果答案是「因爲C中沒有短文字」,那麼C爲什麼沒有短文字?
這實際上並沒有以任何有意義的方式影響我的生活;編寫(簡寫)0而不是0S或其他東西很容易。但不一致使我好奇;當你在深夜起牀時,這是困擾你的事情之一。有人在某個時候做了一個設計決定,以便爲一些基本類型輸入文字,但不是爲所有這些類型輸入文字。爲什麼?
在C,int
至少是爲了有CPU和的「天然」二字大小long
大概意思是「較大自然」字大小(在最後一部分不能肯定,但它也可以解釋爲什麼int
和long
在x86上具有相同的大小)。
現在,我的猜測是:對於int
和long
,有一個自然的表示,它完全符合機器的寄存器。但是在大多數CPU上,較小的類型byte
和short
必須在使用前填充到int
。如果是這樣的話,你也可以有演員陣容。
我懷疑這是一個「除非真正增加價值才加上任何東西」的例子 - 而且它被認爲沒有足夠的價值增加價值。正如你所說的那樣,這很容易解決,坦率地說,它很少有必要(只是爲了消除歧義)。
在C#中也是如此,我從未特別錯過這兩種語言。我在Java中錯過的是一個無符號字節類型:)
另一個原因可能是JVM不知道短和字節。所有的計算和存儲都是通過JVM中的ints,longs,float和double進行的。
有幾件事情需要考慮。
1)如上所述,JVM沒有字節或短類型的概念。通常,這些類型不用於JVM級別的計算;所以人們可以認爲這些文字的使用會較少。
2)對於字節和短變量的初始化,如果int表達式是常量,並且在該類型的允許範圍內,它將隱式轉換爲目標類型。
3)人們總是可以投字面,前(短)10
是的,請加無符號字節:(。手頭的問題,我認爲這是值得一提的還有很長的iteral因爲一個int文字不能表示一個long的所有值,但是int可以表示一個short的所有值。 – 2008-11-25 16:04:05
但是我認爲它確實增加了值 - 不需要強制轉換可以是一個很大的優勢。簡短)(val + 10)`只是令人討厭,儘管Java也必須允許增加short才能工作。 – mjaggard 2013-04-26 09:34:10