[英]Why can't I set a Double object equal to an int? - Java
為什么在嘗試將Double
初始化為int
時會出現錯誤,即使在使用原始類型double
時它不會引發異常?
Double a = 1; // error - incompatible types
Double b = 1.0; // OK
double c = 1; // OK
為什么 class Double
和原始類型double
之間的行為不同?
當您將Double
初始化為:
Double a = 1;
需要做兩件事:
int
到Integer
Integer
擴大到Double
雖然,拳擊很好,但從Integer
擴大到Double
是無效的。 因此,它無法編譯。
請注意,Java 不支持加寬后裝箱轉換,如JLS §5.2 中所述:
賦值上下文允許使用以下之一:
- 身份轉換(§5.1.1)
- 擴大的原始轉換(§5.1.2)
- 擴大參考轉換(§5.1.5)
- 一個裝箱轉換(第 5.1.7 節)可選地后跟一個擴大的參考轉換
- 一個拆箱轉換(第 5.1.8 節)可選地后跟一個擴大的原始轉換。
你的第二個任務是通過拳擊轉換。
而第三次分配經歷了擴大轉換。
這是因為 Java 的自動裝箱會將 1 轉換為 Integer 而不是 Double。
Double a = Double.valueOf(1);
應該管用
因為自動拳擊
Double a = 1; equals to Double a = Integer.valueOf(1);
Double b = 1.0; equals to Double b = Double.valueOf(1);
double c = 1; equals to double c = (double) 1;
您還可以做的是用D
標記您的號碼。
Double d = 1D; equals to Double d = Double.valueOf(1);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.