![](/img/trans.png)
[英]Reasoning behind having to specify L for long, F,D for float, double
[英]explicit use of l for Long,D for Double,,F for Float in autoboxing
Byte byte1=10;
Short short1=20;
Integer integer=30;
在上面的代碼中,自動裝箱成功發生,請參見下面的代碼,我在這里明確地進行了casitng,因為默認情況下它將20用作整數數字文字。
Byte byte1=new Byte((byte) 20);
Short short1=new Short((short) 20);
但是看下面的代碼,我必須顯式地使用l,f和d,而這沒有顯示錯誤........原因是什么。我沒有得到它。
Long long1=40l;
Float float1=50f;
Double double1=60d;
自動裝箱不包括圖元的自動擴展。
java中常量整數數值表達式的默認類型是int
,因此這些數字是ints,如果需要,將自動裝箱到Integers中。 當將較窄的原始類型分配給較寬的類型(例如,將int
分配給long
時,將自動發生擴展。
但是這兩個編譯器動作不會同時發生 。 這就是為什么您需要將原始常量表達式獲取為適當的類型,以便自動裝箱將為正確的類型。
這是浮點文字的語言規范的一部分,即。 F or f
表示float
, D or d
表示double
對於十進制浮點字面量,至少需要一位數字(整數或小數部分)以及小數點,指數或浮點型后綴。
對於整數,
如果整數文字以ASCII字母L或l(ell)為后綴,則其類型為long。 否則為int類型(第4.2.1節)。
拆箱轉換包括:
From type long to type Long
From type float to type Float
From type double to type Double
因此,除非您的類型是正確的類型,否則您將無法取消裝箱。
至於Byte
, Short
, Integer
, JLS又來了
將有符號整數縮小為整數類型T會簡單地丟棄除n個最低階位以外的所有位,其中n是用於表示類型T的位數。除了可能丟失有關數值幅度的信息外, ,這可能導致結果值的符號與輸入值的符號不同。
在您的情況下,無需顯式強制類型轉換,因為這些值在其特定類型的范圍內。 如果相反,您有
Byte b = 1251;
那會產生一個編譯錯誤,通過解決
Byte b = (byte)1251;
但會丟失價值信息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.