我需要检查一小部分逻辑,如果有人能给我一些有价值的意见,我将非常感激。
我有两种检查逻辑的方法,想知道哪种方法更有效。
第一种方式:if(url.equalsIgnoreCase("1")){
url = "aaa";
}
else if(url.equalsIgnoreCase("2")){
url = "bbb";
}
else if(url.equalsIgnoreCase("3")){
url = "ccc";
}
else if(url.equalsIgnoreCase("4")){
url = "ddd";
}
else if(url.equalsIgnoreCase("5")){
url = "eee";
}
else if(url.equalsIgnoreCase("6")){
url = "fff";
}
第二种方式:
int temp = Integer.parseInt(url);
switch (temp) {
case 1:
url = "aaa";
break;
case 2:
url = "bbb";
break;
case 3:
url = "ccc";
break;
case 4:
url = "ddd";
break;
case 5:
url = "eee";
break;
case 6:
url = "fff";
break;
}
请告诉我哪个更有效率。使用Integer.parseInt(string)
是不是很糟糕?
答案 0 :(得分:27)
如果您的值真的是1-6,那么最清晰,最有效的方法是使用数组:
String[] URLS = {...};
url = URLS[Integer.parseInt(url) - 1];
答案 1 :(得分:14)
请让我知道哪个更有效率。
一个switch语句更有效率
使用Integer.parseInt(string)是不是很糟糕?
没有。没关系。但是当你使用java7时,你可以在你的交换机案例中使用String-constants值,但不能在Android上使用。
从效率来看:在大多数情况下,开关看起来更干净。
答案 2 :(得分:4)
在效率方面,请检查:Case vs If Else If: Which is more efficient?,但Way 2看起来更干净,更易读。
答案 3 :(得分:3)
作为一般规则,switch
语句会产生更高效的bytecode
。使用Java 7
时,会引入带String
的切换语句,因此您无需进行转换。
答案 4 :(得分:3)
在这种情况下,switch
效率更高。
事实上,如果您使用的是Java7,则可以直接使用字符串大小写,而不是使用Integer.parseInt()
。
答案 5 :(得分:2)
使用parseInt也不错,但如果字符串不是整数,它会抛出异常。
否则,我认为你可以自己看到这个,开关/案例更容易阅读。
如果你的if结构会有最后的其他情况(包括非数字字符串)
那么你可以做,假设你的整体总是积极的
int temp = -1;
try {
temp = Integer.parseInt(str);
} catch (NumberFormatException ex) {
// ignore exception and use -1 as original value for default case
}
答案 6 :(得分:2)
可读性和可调试性(甚至一个词?)是相当主观的,但有些人(包括我)发现switch
语句更清晰。但是,在许多情况下,与switch
构造相比,编译器使用if else
生成更快的代码的可能性更大。
答案 7 :(得分:2)
由于以下两个原因,switch语句更快。
switch语句通常比if-else-if构造更快,因为控件直接转移到相应的case。而在if-else-if的情况下,将执行所有检查以达到第一个匹配条件。例如,如果指定temp = 6
,则switch语句将直接执行相应的块。 if-else-if构造将遍历所有条件。
调用equalsIgnoreCase()
比在案例匹配背景下执行相等检查更为昂贵。
答案 8 :(得分:1)
这么长的列表是一个switch
语句肯定是更好的选择。如果在比较中切换开关越好,结点越长
答案 9 :(得分:1)
效率取决于两种情况下的匹配条件。请遵循您的回答here。
答案 10 :(得分:1)
我认为另一种方法是使用预先初始化的地图。它应该有(字符串)数字作为键,url结果作为值。然后你可以简单地做
url = map.get(Integer.parseInt(url));
这甚至可能比long switch语句更清晰。
答案 11 :(得分:1)
该开关具有比if else更多的功能,因为您可以通过案例。
详见:http://docs.oracle.com/javase/tutorial/java/nutsandbolts/switch.html
class SwitchDemo2 {
public static void main(String[] args) {
int month = 2;
int year = 2000;
int numDays = 0;
switch (month) {
case 1: case 3: case 5:
case 7: case 8: case 10:
case 12:
numDays = 31;
break;
case 4: case 6:
case 9: case 11:
numDays = 30;
break;
case 2:
if (((year % 4 == 0) &&
!(year % 100 == 0))
|| (year % 400 == 0))
numDays = 29;
else
numDays = 28;
break;
default:
System.out.println("Invalid month.");
break;
}
System.out.println("Number of Days = "
+ numDays);
}
}
将输出
Number of Days = 29
因此,它还取决于您使用的实施要求。