[英]switch expression can't be float, double or boolean
為什么switch
表達式不允許 Java 中的long
、 float
、 double
或boolean
值? 為什么只允許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.