if else or switch case
我需要检查一小段逻辑,如果有人能给我一些有价值的信息,我会非常感激。
我有两种方法来检查我的逻辑,并想知道哪种方法更有效。
第一条道路:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | 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"; } |
第二条道路:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | 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; } |
请告诉我哪个更有效。使用
如果您的值真的是1-6,那么最清晰和最有效的方法是使用数组:
Please let me know which is more efficient.
你的情况是,switch语句更有效
Is it bad to use Integer.parseInt(string)?
不,很好。但是,当您使用Java7时,您可以在您的交换机案例中使用字符串常量值,但不能在Android上使用。
从效率上来说:大多数情况下,开关看起来更干净。
在效率方面,检查这个:案例与假设:哪一个更有效?但是,方法2看起来是一个更干净和可读的代码。
在这种情况下,
实际上,如果您使用的是Java7,那么您可以直接使用字符串大小写,而不是使用
一般来说,
由于以下两个原因,switch语句速度更快。
switch语句通常比if-else if构造更快,因为控件直接传输到相应的情况。而在if else if的情况下,将执行所有检查以达到第一个匹配条件。例如,如果分配
调用
可读性和可调试性(这是一个词吗?)比较主观,但有些人(包括我)认为
使用parseint并不坏,但是如果字符串不是整数,它将抛出异常。
否则,我想你自己也能看到这个,开关/盒子更容易阅读。
如果if构造的final else捕获所有其他情况(包括非数字字符串)
那么你可以这样做,假设你的整数总是正的。
1 2 3 4 5 6 | int temp = -1; try { temp = Integer.parseInt(str); } catch (NumberFormatException ex) { // ignore exception and use -1 as original value for default case } |
这个开关比if-else有更多的特性,因为您可能会遇到各种情况。
有关详细信息,请参阅:http://docs.oracle.com/javase/tutorial/java/nutsandbolts/switch.html
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | 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); } } |
意志输出
1 |
因此,它还取决于您使用的实现需求。
我认为另一种方法是使用预初始化的映射。它应该以(字符串)数字作为键,以URL结果作为值。那你就可以简单地
1 |
这可能是比long switch语句更干净的版本。
效率取决于两种情况下的匹配条件。请在此确认您的答案。
对于这样一个长的列表,