簡體   English   中英

switch 表達式不能是 float、double 或 boolean

[英]switch expression can't be float, double or boolean

為什么switch表達式不允許 Java 中的longfloatdoubleboolean值? 為什么只允許int (以及自動提升為int的那些)?

即使它們是可能的,浮點數和雙精度也難以可靠使用 - 不要忘記,由於表示的性質,無論如何在float / double上執行精確的相等匹配通常都是一個壞主意。

對於布爾值,為什么不使用if開頭?

老實說,我不記得曾經想要打開這些類型中的任何一種。 你有特定的用例嗎?

您可以在switch語句中使用enum ,Java 7將添加String AFAIK。 switch語句來自C,其中只允許int,並且實現其他類型更復雜。

浮點數不適合交換機,因為精確比較通常會因舍入錯誤而中斷。 例如0.11 - 0.1 == 0.01是假的。

開啟布爾值沒有多大用處,因為普通if語句會更簡單

if(a) {

} else { 

}

不會更簡單

switch(a) {
  case true:

     break;
  case false:

     break;
}

順便說一句:如果可用,我會使用switch(long),但不是。 對我來說這是一個罕見的用例。

對於浮點數和雙浮點數和雙精度數,我假設他們已經省略了它,原因與使用==比較它們的原因相同。

對於布爾值,它可能只是因為它無論如何都會對應於if語句。 請記住,在case-expression中只能有常量,因此case總是對應if (someBool)if (!someBool)

long我沒有解釋。 在我看來,在設計語言時可能應該包含這樣的功能。

通常在基於狀態變量執行某些操作時使用switch-case結構。 有一個int有足夠的選項。 布爾只有兩個所以正常如果通常足夠好。 雙打和花車並不是那么准確,以這種方式使用。

坦率地說,我無法想象這個東西的用例,你對這個問題有什么實際問題嗎?

double 有同樣的問題,有解決辦法。

switch括號內,您將double轉換為String和 do case "String" 例如:

double d = 1.5
switch (String.valueOf(d)) {
       case "1.5": 
       break;
}

是的,Java不允許boolean、double、float出現在Switch語句中。 首先是 Switch 語句,最初取自 C lang。 而在 C Switch 語句中只支持 ti 整數在 Switch 中使用。 但是 Java 還在 JAva7 中添加了一個 String,用於在 Switch 中比較預定義的 String。 double 和 float double 和 float 值可以四舍五入任何最接近的值並再次成為整數,在這種情況下,可能會在 switch 語句中選擇兩種不同的情況,因此使用 double 和 float 是一個非常糟糕的主意在 Switch 語句中浮動。

boolean為真假,我們可以用if和else,為什么還要用Switch。? 為了找到正確的大小寫,Switch 語句將搜索大小寫,直到它以默認大小寫結束。 所以只有兩種情況,不需要使用 Switch 語句。

暫無
暫無

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

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