簡體   English   中英

為什么 Double.valueof 可以處理“1D”而 Long.valueof 不能處理“1L”?

[英]why Double.valueof can handle "1D" while Long.valueof cannot handle "1L"?

public class Test {
    public static void main(String[] args) {
        System.out.println(Double.valueOf("1D"));
        System.out.println(Double.valueOf("1.1d"));
        System.out.println(Long.valueOf("1L"));
        System.out.println(Long.valueOf("11l"));
    }
}

1.0
1.1
Exception in thread "main" java.lang.NumberFormatException: For input string: "1L"
    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
    at java.lang.Long.parseLong(Long.java:589)
    at java.lang.Long.valueOf(Long.java:803)
    at Test.main(Test.java:9)

為什么 Double.valueof 可以處理“1D”而 Long.valueof 不能處理“1L”?

那么,對於這種不一致,這是一個糟糕的設計嗎?

“為什么?” 方便。

Long值很容易定義,即所有數字都帶有可選符號,所以他們就是這樣定義的。

Double值很復雜,因此他們決定盡可能重用Java 語言對浮點文字的定義JLS 3.10.2 ,並添加了必要的內容,即符號和特殊值( NaNInfinity )。

當然,這也有不必要的后綴,但那又如何,它不會受到傷害,如果存在它只會被忽略,無論如何它真的從來沒有。

暫無
暫無

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

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