簡體   English   中英

在自動裝箱中顯式使用l表示Long,D表示Double,F表示Float

[英]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表示floatD 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

因此,除非您的類型是正確的類型,否則您將無法取消裝箱。

至於ByteShortIntegerJLS又來了

將有符號整數縮小為整數類型T會簡單地丟棄除n個最低階位以外的所有位,其中n是用於表示類型T的位數。除了可能丟失有關數值幅度的信息外, ,這可能導致結果值的符號與輸入值的符號不同。

在您的情況下,無需顯式強制類型轉換,因為這些值在其特定類型的范圍內。 如果相反,您有

Byte b = 1251;

那會產生一個編譯錯誤,通過解決

Byte b = (byte)1251;

但會丟失價值信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM