如何生成多个或';在Java中,s在一个更简洁的语句中

如何生成多个或';在Java中,s在一个更简洁的语句中,java,if-statement,Java,If Statement,我有一个if语句,大致如下: if (characterStrings[occupation] == "bar-owner" || characterStrings[occupation] == "barrista" || characterStrings[occupation] == "shop owner") 如何在java中使这个和类似的or语句更加简洁 非常感谢,我在任何地方都找不到这方面的文档,使用而不是多个或(|) 从现在起,开关还支持字符串 小例子 switch(characte

我有一个if语句,大致如下:

if (characterStrings[occupation] == "bar-owner" || characterStrings[occupation] == "barrista" || characterStrings[occupation] == "shop owner")
如何在java中使这个和类似的or语句更加简洁

非常感谢,我在任何地方都找不到这方面的文档,

使用而不是多个或(
|

从现在起,开关还支持字符串

小例子

switch(characterStrings[occupation])
{
case "bar-owner": //some codes for bar-owner
break;
case "barrista":// codes for barrista
break;
}
使用而不是多个或(
|

从现在起,开关还支持字符串

小例子

switch(characterStrings[occupation])
{
case "bar-owner": //some codes for bar-owner
break;
case "barrista":// codes for barrista
break;
}

如果你必须检查所有这些条件,那么你必须检查所有这些条件。但是,开关块比较干净,有许多情况需要检查


还要注意,您正在将字符串与
==
进行比较。不要。使用
equals()
方法。

如果必须检查所有这些条件,则必须检查所有这些条件。但是,开关块比较干净,有许多情况需要检查


还要注意,您正在将字符串与
==
进行比较。不要。使用
equals()
方法。

您可以使用以下代码:

if (Arrays.asList("bar-owner", "barrista", "shop owner").contains(characterStrings[occupation]))

这将检查
字符串[职业]
是否为
酒吧老板
酒吧老板
店主
,您可以使用以下代码:

if (Arrays.asList("bar-owner", "barrista", "shop owner").contains(characterStrings[occupation]))

这将检查
字符串[职业]
是否是
酒吧老板
酒吧老板
店主

中的任何一个,如果您比较字符串,请使用
equals()
方法而不是
=

如果要比较字符串,可以使用使用
equals()
方法,而不是
=

您可以先使用,不应使用
=
比较字符串。这几乎总是一个错误。例如:

    if ("hello" == new String("hello")) {
        System.out.println("Something impossible just happened!!");
    }
(这不是bug的唯一情况是比较字符串文本和/或手动“插入”字符串对象。即使如此,这也是一个相当可疑的优化,因为它的正确性取决于您从不使用“正常”字符串。)


在Java6和更早版本中,无法进行比原始版本更简洁、更高效的字符串
equals
比较序列

使用
数组.asList
,如中所示

  if (Arrays.asList("bar-owner", "barrista", 
                    "shop owner").contains(characterStrings[occupation])) {
      // statements
  }
更简洁,但效率也明显降低:

  • contains
    调用必须在内部迭代list对象的元素,使用
    equals
    测试每个元素

  • asList
    调用涉及为varargs参数分配和初始化
    String[]
    ,以及分配和初始化调用返回的
    List
    对象。(您可以潜在地“提升”它以提高性能,但这会降低简洁性…)

在Java 7中:

    switch (characterStrings[occupation]) {
    case "bar-owner": case "barrista": case "shop owner":
        // statements
        break;
    }

更简洁,也可以更高效。Java编译器可能会将其转换为隐藏的静态
HashSet
或等效文件中的查找。将出现一个“收支平衡点”,其中N
序列的测试成本大于哈希表查找的成本。

首先,不应使用
=
比较字符串。这几乎总是一个错误。例如:

    if ("hello" == new String("hello")) {
        System.out.println("Something impossible just happened!!");
    }
(这不是bug的唯一情况是比较字符串文本和/或手动“插入”字符串对象。即使如此,这也是一个相当可疑的优化,因为它的正确性取决于您从不使用“正常”字符串。)


在Java6和更早版本中,无法进行比原始版本更简洁、更高效的字符串
equals
比较序列

使用
数组.asList
,如中所示

  if (Arrays.asList("bar-owner", "barrista", 
                    "shop owner").contains(characterStrings[occupation])) {
      // statements
  }
更简洁,但效率也明显降低:

  • contains
    调用必须在内部迭代list对象的元素,使用
    equals
    测试每个元素

  • asList
    调用涉及为varargs参数分配和初始化
    String[]
    ,以及分配和初始化调用返回的
    List
    对象。(您可以潜在地“提升”它以提高性能,但这会降低简洁性…)

在Java 7中:

    switch (characterStrings[occupation]) {
    case "bar-owner": case "barrista": case "shop owner":
        // statements
        break;
    }

更简洁,也可以更高效。Java编译器可能会将其转换为隐藏的静态
HashSet
或等效文件中的查找。这将是一个“收支平衡”点,其中N
等于
测试序列的成本大于哈希表查找的成本。

非常感谢!正是我想要的。非常感谢!正是我想要的。谢谢你的建议也很有帮助,虽然不是我想要的。@user2752347我已经给出了一个小例子,请检查这个。这回答了一个完全不同的问题。他没有试图单独处理每个案例,而是一起处理,因此if语句包含了所有案例。@leigero使用多个or语句会降低效率,这就是为什么java提供了switch,而不是if-else。如果你注意到这个问题是关于一个带有多个参数的If语句。假设他试图说“如果对象是酒吧老板、律师或商店老板,那么就扇他们一耳光。”你的开关盒将有3个“扇他们一耳光”命令,这几乎没有什么效率。谢谢你的建议,这也很有帮助,尽管不是我想要的。@user2752347我给出了一个小例子,检查这个答案完全不同。他没有试图单独处理每个案例,而是一起处理,因此if语句包含了所有案例。@leigero使用多个or语句会降低效率,这就是为什么java提供了switch,而不是if-else。如果你注意到这个问题是关于一个带有多个参数的If语句。