我有一个关于java中的switch / case语句和enums的问题。
在我的代码中,我想基于对象“currentMethod”中设置的“MatchingMethods”类型的Enum做一些事情。 枚举“MatchingMethods”包含
形式的几个枚举{EXACT_STRING_MATCHING, DEPTH_MATCHING, [...]}
现在奇怪的是,对象“currentMethod”包含“EXACT_STRING_MATCHING”类型的枚举,不仅第一种情况被执行,而且第二种情况也被执行。
我知道在第一个案例的代码之后没有break语句但是在我看来不应该执行第二个案例的代码,因为枚举“EXACT_STRING_MATCHING”与“DEPTH_MATCHING”不匹配。
如果我在第一个案例之后发表了一个中断声明,那似乎完全没问题......
我的代码如下:
[...]
MatchingMethods mM = currentMethod.getMatchMethod();
switch (currentMethod.getMatchMethod()) {
case EXACT_STRING_MATCHING:
//do something here
case DEPTH_MATCHING:
comparedNodePair.setDepthMatchResult(currentMetricResult);
break;
[...]
我完全糊涂了......
愿有人能帮助我吗?
答案 0 :(得分:2)
但它会被执行,因为一旦其中一个case语句为true,执行流程就会“落到”,请参阅here获取某些信息
答案 1 :(得分:1)
您已经提到过,您没有break
- switch
就像goto
一样,其中case
是要跳过的标签而没有“边界”或功能。
这也是关于switch
的最大批评,因为今天没有人会使用goto
,但switch
肯定是相似的。
答案 2 :(得分:0)
如果在case块的末尾没有break语句,这是正常的。 如果您只想要执行确切的块,则添加break语句是必要的。