我可以做得更短吗?

时间:2014-06-27 06:34:36

标签: java if-statement

是否可以缩短if语句?例如:

if (intno == 0 || intno == 4 || intno == 7)

可能是这样的:

if (intno == 0 || 4 || 7)

那会出现错误,但有什么相似的吗?

3 个答案:

答案 0 :(得分:3)

对于整数类型和枚举,您可以使用switch语句:

switch(intno) {
     case 0:
     case 4:
     case 7:
          //code here
          break;
}

这也适用于Java 7 +中的字符串

答案 1 :(得分:1)

评论中已经提出以下建议:

Arrays.asList(0, 4, 7).contains(intno)

它是正确的,更短,但速度更慢。

请注意,此代码在幕后执行了大量操作:

  • 047 int转换为Integer s。
  • 创建包含这些对象的数组
  • 创建包含该数组的List
  • intno转换为Integer
  • 对列表执行线性搜索,在每个对象上调用equals

方式比仅仅三次检查慢。当然,如果您每次用户点击按钮时都执行一次该代码,那么这并不重要。如果你每秒呼叫它一百次,它可能会。

然而,在我看来,使用它可以比使用long更清楚,特别是如果不是3,则有15个有效条件。如果不是使用幻数,你甚至可以存储返回的列表,你可能会得到一些清晰点:

private static final List<Integer> VALID_NUMBERS = Arrays.asList(0, 4, 7);

// ...

if (VALID_NUMBERS.contains(intno)) {
    // Code here
}

更短,可以说更清晰。它 慢,所以要小心这些结构,不要每次都使用它。

答案 2 :(得分:0)

您可以生成真值映射

Set<Integer> set = new HashSet<Integer>();
map.add(0);
map.add(4);
map.add(7);

然后

if(map.contains(intValue){
}