2017-06-16 92 views
6

爲什麼我們不寫s這樣的短數據類型,比如short s = 2s;,因爲我們用float來寫float f = 1.23f爲什麼我們不爲短類型添加「s」後綴?

我知道當我們寫float默認情況下,編譯器將其視爲double和分配8個臨時字節給它,當它試圖複製8字節float的4,結果在一個類型的錯誤,所以這是爲什麼我們在初始化一個float後編寫f,但爲什麼我們不按照默認的字面類型做類似short

回答

1

這是因爲從double到float會截斷值並丟失數據,所以編譯器不會自動執行該操作,您必須明確地告訴它。但是,當從較小的尺寸,較短的尺寸,到較大的尺寸int時,它會自動完成,因爲編譯器只需填充數據並且沒有潛在的數據丟失,而不是前一種情況。

+1

我們也來自int默認情況下默認情況下int literal是我認爲的標準 – PVP

+0

但是,一個短變量可以分配給int文本。例如,「short s = 32767」。這從一種較大的尺寸變爲一種較小的尺寸。編譯器似乎正在查看右側int的實際值,因爲不接受「short t = 32768」。 –

+0

@AndyThomas啊,沒有看到它的應用程序。 –

4

對於長文字,Java語言規範允許類型後綴Ll。但是,它不提供短值的類型後綴。這不是必需的,因爲:

  • 任何可以用短整型表示的值也可以用默認整型int表示。
  • 如果constant expression,則允許將短整型值賦值給短整型變量,其值可以用短整型表示。看到Java Language Specification, "Assignment Contexts":如果變量的類型是字節,短,或炭和常量表達式的值在變量的類型表示的,可以使用

甲基本收縮轉換。

+0

Thomus先生然後還可以由浮點數表示的任何值也可以由默認類型double?表示。 – PVP

+2

@PVP請參閱https://stackoverflow.com/a/14103012/3788176 –

0

爲什麼我們不給short類型添加「s」後綴?

因爲Java語言在這一點上是不一致的。

JLS的是沒有浮動數字原始類型更加靈活,因爲浮動數字基本類型:

此外,如果表達式是 類型字節的恆定表達(§15.28) ,short,char或int

如果變量 的類型是byte,short或char,並且常量012的值可能會使用縮小基元轉換表達式可以表示變量的類型。

我認爲在這樣做byte, short, char, or intfloat and double區分聲明和操縱它們是不是真的需要。它會在使用它們時造成不一致和潛在的錯誤。

如果short s = 10;是有效的,因爲窄化原語轉換由編譯器確認它沒有丟失信息,所以float f = 10.0;也會因爲完全相同的原因而有效。

相關問題