在较新的 Java 版本中开始支持 switch 字符串。
那么
switch(name){
case "abc":
return ...
case "def":
return ...
case "ghi":
return ...
// 假设有数千个
}
与
if("abc".equals(name)){
return ...
}
if("def".equals(name)){
return ...
}
if("ghi".equals(name)){
return ...
}
// 假设有数千个
问题来了,二者相比:
- 真的只是语法糖吗?有性能提升吗?
- 如果有性能提升,它做了哪些性能提升?
更多问答 >>
-
2020-06-07 20:55
-
每日一问 | Activity与Fragment的那些事,“用起来没问题,我都要走了,你崩溃了?”
2020-06-22 00:39 -
2020-06-09 23:17
-
每日一问 | 曾经的记忆中“onSaveInstanceState 会在系统意外杀死 Activity 时调用”,正确吗?
2020-07-12 23:49 -
每日一问 | Android P 上,需要配置 network_security_config ,才能抓包,正确吗?
2020-06-29 21:26 -
2020-05-25 23:08
-
每日一问 | 我们常说的dalvik虚拟机是基于寄存器的,而jvm是基于栈,到底指的是什么?
2020-05-20 21:29 -
2020-05-21 01:15
-
每日一问 | Activity 调用了finish()方法会立即调用onDestory()吗?
2020-05-13 00:16 -
2020-05-07 10:02
1.不仅仅是语法糖,有性能提升
2.switch字符串时,会先把String hashCode,如果冲突则比较equals。接下来就是跳转表的映射查找了。这一切都是编译器处理的。而不需要运行时再处理。所以性能上比if要高效。三哥
对于Java语言来说,在Java 7之前,switch语句中的条件表达式的类型只能是与整数类型兼容的类型,包括基本类型char、byte、short和int,与这些基本类型对应的封装类Character、Byte、Short和Integer,还有枚举类型。这样的限制降低了语言的灵活性,使开发人员在需要根据其他类型的表达式来进行条件选择时,不得不增加额外的代码来绕过这个限制。为此,Java 7放宽了这个限制,额外增加了一种可以在switch语句中使用的表达式类型,那就是很常见的字符串,即String类型。
详细的可以看 https://blog.csdn.net/wangbf_java/article/details/53455208