Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么在Java中要避免switch语句?_Java_If Statement_Switch Statement - Fatal编程技术网

为什么在Java中要避免switch语句?

为什么在Java中要避免switch语句?,java,if-statement,switch-statement,Java,If Statement,Switch Statement,我的一位老师说我们应该避免使用switch语句。 为什么?这有什么坏处?你们的教练可能一直在试图阻止你们陷入一种使用switch语句作为拐杖的情况!在某些情况下,它们是合适的,但它们通常用于硬编码,以便更好地处理多态性 例如: Car c = getCar(); switch(c){ case FordCar: driveFordCar(); break; case ToyotaCar: driveToyotaCar(); break; default

我的一位老师说我们应该避免使用switch语句。
为什么?这有什么坏处?

你们的教练可能一直在试图阻止你们陷入一种使用switch语句作为拐杖的情况!在某些情况下,它们是合适的,但它们通常用于硬编码,以便更好地处理多态性

例如:

Car c = getCar();
switch(c){
  case FordCar:
    driveFordCar();
    break;
  case ToyotaCar:
    driveToyotaCar();
    break;
  default:
    break;
}

最好将抽象方法driveCar()放在抽象类或接口Car中,然后在FordCar和ToyotaCar中实现它。如果您想添加对大众汽车的支持,请考虑将driveCar的实现添加到新的VolkswagenCar类(如果您不这样做,编译器会抱怨!),而不必记住更新您的case语句。

If/elseif/else和switch语句都有用途。两者都不比另一个好,也不比另一个差,因为Java编译器很可能会将它们转换为相同/相似的字节码


当if或elseif条件匹配时,将执行该块中的代码,然后代码跳到if/elseif/else“梯形图”的末尾。在switch语句中,当条件匹配时,代码将从匹配的“case”继续,直到找到“break;”。这样,就可以执行任何其他匹配的条件。

事实上,这不是真的。一旦if语句进入一个较大的if-else梯形图,它将执行该块并退出底部。你的老师错了。如果让我猜的话,我会认为你的老师认为语法对新生来说有点奇怪(每种情况都需要一个
中断
,可以忘记)。但你不应该仅仅因为它会让人困惑而回避。你会很长一段时间不必要地害怕switch语句。在编程中,不同的情况需要不同的解决方案。在某些情况下,switch语句比if-else容易得多。问问你的老师为什么。我们怎么知道他是怎么得出这个结论的?这当然不寻常。我怀疑你的老师不是在对比
开关
if
,而是在对比。这只有在
汽车
是枚举时才有效。当然,您也可以使用
int