【问题标题】:Java Ternary Operator to set True or falseJava 三元运算符设置 True 或 false
【发布时间】:2012-12-26 09:56:16
【问题描述】:

我正在尝试设置条件并设置 true 或 false 如下,但它始终返回 false。

boolean checked = (categoriesCursor.getString(3) == "1") ? true
                    : false;

Log.i("Nomad",categoriesCursor.getString(3)+ " "+checked);

当我尝试输出值时,我得到以下结果。

01-12 00:05:38.072: I/Nomad(23625): 1 false
01-12 00:05:38.072: I/Nomad(23625): 1 false
01-12 00:05:38.072: I/Nomad(23625): 1 false
01-12 00:05:38.072: I/Nomad(23625): 1 false
01-12 00:05:38.072: I/Nomad(23625): 1 false
01-12 00:05:38.072: I/Nomad(23625): 0 false
01-12 00:05:38.072: I/Nomad(23625): 0 false

【问题讨论】:

  • 对您的代码的评论:您为什么在这里使用三元运算符?你可以说boolean checked = "1".equals(categoriesCursor.getString(3));
  • 对此处所有答案的评论:"1".equals(categoriesCursor.getString(3)); 优于 categoriesCursor.getString(3).equals("1"),因为出现 NullPointerException 的机会较少。
  • @DanielKaplan 哇。我不知道你可以做这样的事情:D
  • str.equals("literal")"literal".equals(str) 更好,因为包含null 的与str 相关的错误被捕获,并且更具可读性。 (另外? true : false 是没有意义的——别管它了。)

标签: java ternary-operator


【解决方案1】:

它总是返回false,因为你是在比较references,而不是strings。你可能是这个意思:

boolean checked = (categoriesCursor.getString(3).equals("1")) ? true
                : false;

恰好相当于这个:

boolean checked = categoriesCursor.getString(3).equals("1");

如果categoriesCursor.getString(3) 可能是null,那么这样做会更安全:

boolean checked = "1".equals(categoriesCursor.getString(3));

【讨论】:

  • 最后一条语句是做什么的?
  • @HarshaMV:它检查"1" 是否等于 与您从光标处得到的字符串
  • @HarshaMV:Java 有字符串常量,它们表现为字符串对象; String 类可用的所有方法也可用于String 常量。
【解决方案2】:

使用equals 而不是==

boolean checked = (categoriesCursor.getString(3).equals("1"));

【讨论】:

    【解决方案3】:

    试试这个

    (categoriesCursor.getString(3).equals("1")) ? true : false;
    

    【讨论】:

      【解决方案4】:

      使用categoriesCursor.getString(3).equals("1") 而不是==

      【讨论】:

        【解决方案5】:

        首先,要比较字符串,您必须使用equals 方法:

        categoriesCursor.getString(3).equals("1")
        

        其次,这里不需要三元运算符。 equals 已经产生了一个布尔值,所以只需分配它:

        boolean checked = categoriesCursor.getString(3).equals("1");
        

        【讨论】:

          【解决方案6】:

          首先不需要三元运算符。那么你必须使用 equals() 而不是 == 。因为==运算符会检查对象的引用是否相等。

          【讨论】:

            【解决方案7】:

            改成这样:

            boolean checked = (categoriesCursor.getString(3).equals("1")) ? true : false;
            

            不要使用== 比较字符串内容。

            注意== 运算符不能在 JAVA 中重载或修改。如果您使用object1 == object2,其中object1object2 是字符串或任何其他对象,您将检查引用是否指向同一个底层对象。这不会比较内容。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2014-02-08
              • 2011-03-12
              • 1970-01-01
              • 2016-02-13
              • 2014-04-04
              • 1970-01-01
              相关资源
              最近更新 更多