Jac*_*ips 1 java language-agnostic
谁能解释的折衷(即使它是可以忽略不计),会是怎样使用之间if,if else或者switch在类似如下的代码相当大的块?如果比较String或另一个Object而不是int,情况会有所不同吗?这些例子都是Java,但它是一个普遍的问题.
编辑
正如几个答案所述,一个开关会更快,如果有多个案例,应该可以使用.然而,在这样的长链中,没有人评论ifvs.if else引发这个问题的是我经常创建这些块,因为大多数情况需要多个表达式才能使用开关.我想排除else感觉草率,但这不是真的有必要,为什么要包括它?
public String getValueString(int x) {
if (x == 1) return "one";
if (x == 2) return "two";
if (x == 3) return "three";
if (x == 4) return "four";
...
return null;
}
Run Code Online (Sandbox Code Playgroud)
VS
public String getValueString(int x) {
if (x == 1) return "one";
else if (x == 2) return "two";
else if (x == 3) return "three";
else if (x == 4) return "four";
...
return null;
}
Run Code Online (Sandbox Code Playgroud)
VS
public String getValueString(int x) {
switch(x) {
case 1: return "one";
case 2: return "two";
case 3: return "three";
case 4: return "four";
...
}
return null;
}
Run Code Online (Sandbox Code Playgroud)
如果您有很多案例,那么该switch方法是首选方法.原因是因为前两个基本上需要对所有if语句进行线性搜索.所以这是O(N)你拥有的案件数量.
另一方面,switch语句的优化方式不同,可以是O(log(N))或者甚至O(1)是找到正确的情况.
编译器如何实现O(log(N))甚至O(1)?
O(log(N)).O(1).