此功能是否会放入以后的 Java 版本中?
有人可以解释为什么我不能这样做,就像Java语句的技术方式一样吗?switch
网友回答:
如果您在代码中有一个可以打开字符串的位置,那么最好将字符串重构为可以打开的可能值的枚举。当然,您将字符串的潜在值限制为枚举中的值,这可能是需要的,也可能不是需要的。
当然,您的枚举可以有一个“其他”条目和一个fromString(String)方法,那么您可以拥有
ValueEnum enumval = ValueEnum.fromString(myString);
switch (enumval) {
case MILK: lap(); break;
case WATER: sip(); break;
case BEER: quaff(); break;
case OTHER:
default: dance(); break;
}
网友回答:
带有大小写的 switch 语句已经在 Java SE 7 中实现,至少在首次请求它们 16 年后。没有提供延迟的明确原因,但可能与性能有关。String
该功能现已通过“脱糖”过程实现;在声明中使用常量的干净、高级语法在编译时会按照模式扩展为更复杂的代码。生成的代码使用一直存在的 JVM 指令。javac
String
case
A with case 在编译期间转换为两个开关。第一个将每个字符串映射到一个唯一的整数,即它在原始交换机中的位置。这是通过首先打开标签的哈希代码来完成的。相应的情况是测试字符串相等性的语句;如果哈希值存在冲突,则测试是级联的。第二个开关反映了原始源代码中的样式,但将大小写标签替换为相应的位置。这个两步过程可以轻松保留原始交换机的流量控制。switch
String
if
if-else-if
有关 的更多技术深度,可以参考 JVM 规范,其中描述了 switch 语句的编译。简而言之,有两种不同的JVM指令可用于交换机,具体取决于情况使用的常量的稀疏性。两者都依赖于对每种情况使用整数常量才能有效执行。switch
如果常量很密集,则它们将用作指令指针表(指令)的索引(减去最低值后)。tableswitch
如果常量稀疏,则执行对正确大小写的二进制搜索 – 指令。lookupswitch
在对对象进行脱糖时,可能会使用这两个指令。适用于第一次打开哈希码以找到原始位置的情况。生成的序数是 .switch
String
lookupswitch
tableswitch
这两个指令都需要在编译时对分配给每个事例的整数常量进行排序。在运行时,虽然 的性能通常看起来优于 的性能,但它需要一些分析来确定表是否足够密集以证明时空权衡的合理性。Bill Venners 写了一篇很棒的文章,更详细地介绍了这一点,并深入介绍了其他 Java 流控制指令。O(1)
tableswitch
O(log(n))
lookupswitch
在 JDK 7 之前,可以近似于基于 -的交换机。这使用编译器在每个类型上生成的静态方法。例如:enum
String
valueOf
enum
Pill p = Pill.valueOf(str);
switch(p) {
case RED: pop(); break;
case BLUE: push(); break;
}
网友回答:
以下是基于 JeeBee 帖子的完整示例,使用 java 枚举而不是使用自定义方法。
请注意,在 Java SE 7 及更高版本中,您可以在 switch 语句的表达式中使用 String 对象。
public class Main {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
String current = args[0];
Days currentDay = Days.valueOf(current.toUpperCase());
switch (currentDay) {
case MONDAY:
case TUESDAY:
case WEDNESDAY:
System.out.println("boring");
break;
case THURSDAY:
System.out.println("getting better");
case FRIDAY:
case SATURDAY:
case SUNDAY:
System.out.println("much better");
break;
}
}
public enum Days {
MONDAY,
TUESDAY,
WEDNESDAY,
THURSDAY,
FRIDAY,
SATURDAY,
SUNDAY
}
}
模板简介:该模板名称为【为什么不能在字符串上使用 switch 语句?】,大小是暂无信息,文档格式为.编程语言,推荐使用Sublime/Dreamweaver/HBuilder打开,作品中的图片,文字等数据均可修改,图片请在作品中选中图片替换即可,文字修改直接点击文字修改即可,您也可以新增或修改作品中的内容,该模板来自用户分享,如有侵权行为请联系网站客服处理。欢迎来懒人模板【Java】栏目查找您需要的精美模板。