簡體   English   中英

為什么我不能將 Double object 設置為等於 int? - Java

[英]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;

需要做兩件事:

  • 拳擊intInteger
  • 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.

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