【问题标题】:Java: == in print statement gives different answers [duplicate]Java:==在打印语句中给出了不同的答案[重复]
【发布时间】:2016-04-23 05:21:32
【问题描述】:
String a = "abc";
String b = "abc";

System.out.println("Result .... " + a==b); // false
System.out.println(a==b);                  // true

1st 打印语句打印false,2nd 打印true,但理想情况下它必须是true。为什么在 1st 打印语句中是 false

【问题讨论】:

  • 你知道不要把字符串和==比较吧?
  • @John3136 我很清楚这一点。更好地理解问题场景。
  • 好东西。就在我看到string == string 时,警钟开始响起……
  • 为什么要问同样的问题:stackoverflow.com/questions/34848089/…?发布的答案不清楚吗?您能解释一下您还想获得哪些其他信息吗?

标签: java


【解决方案1】:

System.out.println("Result .... " +a==b); -> 结果字符串将附加“a”,然后与 b 比较,因此结果为 false。

【讨论】:

    【解决方案2】:

    操作顺序:

    "Result .... " + a==b
    

    等价于

    ("Result .... " +a) == b
    

    这将是false,因为这两个字符串不是同一个引用。

    对此的解释是+ 加法运算符的优先级高于== 逻辑等价。

    由于interning,表达式a == b 在第二个语句中返回true,其中ab 实际上指的是同一个字符串对象。

    单击 here 以获取 Oracle 的 Java 运算符优先级表的链接。

    【讨论】:

      【解决方案3】:
      1. 忘记在 java 中通过 == 检查相等性。在 Java 中,此操作检查对象链接的相等性。此外,它还适用于检查简单数字的相等性。你应该使用 .equals 方法

        String a = "abc";
        String b = new String(a);
        System.out.printLn(a == b);//false
        System.out.println(a.equals(b));//true
        
      2. 了解java中的操作顺序

      【讨论】:

        【解决方案4】:

        这是因为在"Result .... " +a==b 中,它首先将"Result .... " 添加到a,然后将== 添加到b。你这样写"Result .... " +(a==b)就OK了。

        【讨论】:

          【解决方案5】:

          在第一个语句中,您将"Result .... " + ab 进行比较。在第二个中,您将ab 进行比较,因此存在差异。将您的第一个语句更改如下:

           System.out.println("Result .... " + (a==b));
          

          请记住,应该使用equals() 方法而不是== 来比较字符串。

          【讨论】:

            【解决方案6】:

            System.out.println("Result .... " +a==b);

            字符串Result 附加了'a',然后与b 比较,因此它提供false。 (Result .... a == b) 这是假的。

            点击此链接了解precedence of operators in javathis

            Operator + has more precedence than == operator.
            

            尝试添加括号,您将看到差异。括号单独评估。

            public static void main(String[] args) {
                    String a = "abc";
                    String b = "abc";
            
                    System.out.println("Result .... " + (a == b)); // false
                    System.out.println(a == b); // true}
                }
            

            输出

            Result .... true
            true
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2013-07-01
              • 2011-09-15
              • 2019-09-19
              • 2016-08-01
              • 2014-02-27
              • 2021-07-17
              相关资源
              最近更新 更多