2016-02-28 149 views
-1

除了性能,我想知道是否有某些情况下只能使用If语句而不使用Switch语句,反之亦然?“If语句”与Java中的“Switch语句”完全相同吗?

因为它们是完全可以互换的吗?如果我愿意或者会打破特定的程序,我可以将整段代码从Switch语句交换到If语句,反之亦然?

不是我想要的,只是理论上和出于好奇心,因为我是新来的编码,并一直想知道这一点。

我无法真正找到我正在寻找的答案,所以我很抱歉如果这是重复的。

回答

4

他们是他们可以做什么根本的不同 - if语句可以检查你可以以某种方式提炼到一个boolean值的任何逻辑,而switch报表每种情况比较精确值 - 见the docs了解详情。

if-then-else语句可以基于值或条件范围测试表达式,而switch语句仅基于单个整数,枚举值或String对象测试表达式。

这意味着,如果你想要做的不是“这是否值等于这个数字,枚举或字符串”为每一种情况下,你需要if语句(或管理流程的一些其他方式)更复杂的逻辑,而不是一个switch

一个简单的例子是检查,如果数量超过10,但在9000

if (value > 10 && value < 9000) { 
    ... 
} 

这个转换为switch语句将意味着做一些疯狂的喜欢对每一个可能的值的情况下,超过10但在9000 )

+0

啊好吧,这是有道理的。我还没有进入更复杂的逻辑,所以我不能理解为什么If语句甚至存在。感谢您的快速和彻底的答案! – Graver

+0

@格雷弗值得注意的是,还有其他的不同之处 - 开关语句具有贯穿性(没有'break's,流程会落入未来的案例中) - 这很难用if语句来模拟(这是一个原因'switch'经常被新语言所遗漏 - 它的语义是很尴尬和容易犯错的 - 它的主要优点是容易优化)。 –