【问题标题】:When would you use the conditional operator in java (? :) instead of the if else statement?你什么时候会在 java (? :) 中使用条件运算符而不是 if else 语句?
【发布时间】:2018-08-04 09:42:24
【问题描述】:

我有一段代码使用条件运算符将变量 x 的值与 5 进行比较:

(x >=5 ? x : -x)

与常规 if else 语句相比,使用条件运算符有什么好处?

【问题讨论】:

标签: java if-statement conditional


【解决方案1】:

是的,它可以在 Java 中使用;但是请注意 x =="Cheese" 不是在 Java 中比较字符串的正确方法,您需要类似 "Cheese".equals(x) 的东西。

【讨论】:

    【解决方案2】:

    是的,它可以使用,但是在这种情况下使用-x 是没有意义的,所以这取决于当 String 是输入时你想要返回什么。你可以这样做:

    ("Cheese".equals(x) ? <some object of expected type X> : <some other object of expected type X>)

    其中X 可以是任何其他类型的String。并且记得使用"string".equals(x) 而不是x.equals("string")。这可以防止NullPointerException

    对于原始值,您可以使用==,但对于对象,您需要使用equals 方法。当您可以在 String 上使用 == 时,有一些极端情况,但我猜它们与您的情况无关,您可以在本主题之外阅读它。

    PS:一些答案谈论 if else 语句,但这不是问题的意义所在。

    这可以像 if else 一样用于所有帐户吗?例如,你能 与它比较字符串?

    我很确定like an if else 是指具有if else 类似行为的条件运算符,而不是if else 指令本身。

    【讨论】:

      【解决方案3】:

      注意 ?: 是一个表达式 - 它返回一个必须使用的值

      z  = (x >=5 ? x : -x)
      

      Java 中的if 构造不是 表达式(在某些语言中它是)并且不返回值,因此在这个意义上它们是 等价的.

      if 选项执行赋值时,它们是等价的:

      if("Cheese".equals(x)) {
          type = "Dairy";
      } else {
          type = "Maybe not dairy";
      }
      

      这是一样的

      type =  "Cheese".equals(x) ? "Dairy" : "Maybe not dairy"; 
      

      您可以将?: 嵌套到任意深度,但实际上不应该——它变得非常难以阅读:

          List<String> cheeses  = Arrays.asList("Gouda", "Edam");
          String x= "Gouda";
      
          String type =  cheeses.contains(x) ? "Gouda".equals(x) ? "Yummy Gouda" : "Cheese - but not Gouda" : "Maybe not dairy";
      

      【讨论】:

      • 正确 - 更安全方法的修正答案
      • 酷他们是一样的。如果你想在第一个 if 中嵌套另一个 if 怎么办?所以如果它等于 Cheese,那么它会问什么样的奶酪?这就是我坚持的部分。如果将嵌套的 if 转换为条件,而不使用 if。
      【解决方案4】:

      EVERY 可能的情况下,三元运算符不等同于 if-else。这是因为使用三元运算符的两种可能结果都是 return 值(例如,简单打印到控制台不是返回值,因此它不可能是三元运算符的可能结果之一)。 p>

      看,if-else 可以做到,但使用三元运算符则不行:

      if (x > 5) {
          System.out.println("Statement is true");
      else {
          System.out.println("Statement is false");
      }
      

      不能用三元运算符做到这一点:

      x > 5 ? System.out.println("Statement is true") : System.out.println("Statement is false");
      

      当使用三元运算符的两个结果都被视为返回值时,它们相当于if-else

      【讨论】:

        猜你喜欢
        • 2011-08-30
        • 2020-03-24
        • 1970-01-01
        • 2010-10-01
        • 2014-06-16
        • 1970-01-01
        • 2011-09-06
        • 2011-10-02
        相关资源
        最近更新 更多