Java:==在print语句中给出了不同的答案

时间:2016-01-18 05:40:23

标签: java

String a = "abc";
String b = "abc";

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

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

6 个答案:

答案 0 :(得分:4)

System.out.println("Result .... " +a==b); - >结果字符串将附加' a'然后与b进行比较,结果为假。

答案 1 :(得分:4)

运营顺序:

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

相当于

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

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

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

表达式a == b由于interning而在您的第二个语句中返回true,其中ab实际上引用相同的字符串对象。< / p>

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

答案 2 :(得分:2)

  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中的操作顺序

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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

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

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

答案 5 :(得分:0)

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

字符串Result附加了&#39; a&#39;然后与b进行比较,因此它提供了错误。 (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