爲什麼我們不寫s
這樣的短數據類型,比如short s = 2s;
,因爲我們用float來寫float f = 1.23f
?爲什麼我們不爲短類型添加「s」後綴?
我知道當我們寫float
默認情況下,編譯器將其視爲double
和分配8個臨時字節給它,當它試圖複製8字節float
的4,結果在一個類型的錯誤,所以這是爲什麼我們在初始化一個float
後編寫f
,但爲什麼我們不按照默認的字面類型做類似short
?
爲什麼我們不寫s
這樣的短數據類型,比如short s = 2s;
,因爲我們用float來寫float f = 1.23f
?爲什麼我們不爲短類型添加「s」後綴?
我知道當我們寫float
默認情況下,編譯器將其視爲double
和分配8個臨時字節給它,當它試圖複製8字節float
的4,結果在一個類型的錯誤,所以這是爲什麼我們在初始化一個float
後編寫f
,但爲什麼我們不按照默認的字面類型做類似short
?
這是因爲從double到float會截斷值並丟失數據,所以編譯器不會自動執行該操作,您必須明確地告訴它。但是,當從較小的尺寸,較短的尺寸,到較大的尺寸int時,它會自動完成,因爲編譯器只需填充數據並且沒有潛在的數據丟失,而不是前一種情況。
對於長文字,Java語言規範允許類型後綴L
或l
。但是,它不提供短值的類型後綴。這不是必需的,因爲:
int
表示。甲基本收縮轉換。
Thomus先生然後還可以由浮點數表示的任何值也可以由默認類型double?表示。 – PVP
@PVP請參閱https://stackoverflow.com/a/14103012/3788176 –
爲什麼我們不給short類型添加「s」後綴?
因爲Java語言在這一點上是不一致的。
JLS的是沒有浮動數字原始類型更加靈活,因爲浮動數字基本類型:
此外,如果表達式是 類型字節的恆定表達(§15.28) ,short,char或int:
如果變量 的類型是byte,short或char,並且常量012的值可能會使用縮小基元轉換表達式可以表示變量的類型。
我認爲在這樣做byte, short, char, or int
和float and double
區分聲明和操縱它們是不是真的需要。它會在使用它們時造成不一致和潛在的錯誤。
如果short s = 10;
是有效的,因爲窄化原語轉換由編譯器確認它沒有丟失信息,所以float f = 10.0;
也會因爲完全相同的原因而有效。
我們也來自int默認情況下默認情況下int literal是我認爲的標準 – PVP
但是,一個短變量可以分配給int文本。例如,「short s = 32767」。這從一種較大的尺寸變爲一種較小的尺寸。編譯器似乎正在查看右側int的實際值,因爲不接受「short t = 32768」。 –
@AndyThomas啊,沒有看到它的應用程序。 –