2016-02-28 19 views
1

浮原始類型我有一個有關聲明Java中的一個長變量問題:分配一個值長和Java中

這編譯:long x = 10;
這給出了一個編譯器錯誤:long x = 1000000000000
這編譯:long x = 1000000000000L
爲什麼我不需要在第一種情況下將數字放在後面?這與編譯器自動將長整型轉換爲整型值有什麼關係(因爲Iguess在第一個例子中發生了什麼)?

兼談浮動的同一個問題:

這並不編譯:float f = 10.1;
這編譯:float f = 10;
這編譯:float f = 10.1f;

爲什麼第一個例子不能編譯?爲什麼第二個例子中不需要f-prefix?這與編譯器如何自動轉換爲雙精度?

在此先感謝!

+1

因爲沒有L後綴,數字是一個int,1000000000000對於int來說太大 – 2016-02-28 12:05:38

+0

*「如果整數字面量後綴爲ASCII字母L或l(ell),則該類型爲long類型;否則爲鍵入int(§4.2.1)。「* - 1000000000000不能放入int。 – Maroun

+0

對於浮點數,編譯器告訴你爲什麼:「錯誤:不兼容的類型:從double到float的可能的有損轉換」 – 2016-02-28 12:06:42

回答

4

沒有任何後綴的數字常量具有默認類型。如果它們是整數(即它們沒有浮點數),則默認類型爲int。如果它們具有浮點,則默認類型爲double

因此

而不將L後綴的整數常數(其表示long字面)不能超過Integer.MAX_VALUE大,並且double恆定10.1不能被分配給一個變量float沒有顯式轉換。

在另一方面,int10可以分配給一個變量float,以及所述float10.1f

+0

完成,但非常簡短。我喜歡你的風格。 – Joffrey