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
?
答案 0 :(得分:4)
System.out.println("Result .... " +a==b);
- >结果字符串将附加' a'然后与b进行比较,结果为假。
答案 1 :(得分:4)
运营顺序:
"Result .... " + a==b
相当于
("Result .... " +a) == b
这将是false
,因为这两个字符串不是相同的引用。
对此的解释是+
加法运算符的高于优先级高于==
逻辑等价。
表达式a == b
由于interning而在您的第二个语句中返回true
,其中a
和b
实际上引用相同的字符串对象。< / p>
单击here以获取Java中Oracle运算符优先级表的链接。
答案 2 :(得分:2)
在java中忘记检查等于==。在Java中,此操作检查对象链接的相等性。此外,它适用于检查简单数字的相等性。你应该使用.equals方法
String a = "abc";
String b = new String(a);
System.out.printLn(a == b);//false
System.out.println(a.equals(b));//true
了解java中的操作顺序
答案 3 :(得分:0)
这是因为在"Result .... " +a==b
中,它首先将"Result .... "
添加到a
,然后==
添加到b
。如果你这样写"Result .... " +(a==b)
,那就没关系了。
答案 4 :(得分:0)
在第一个声明中,您要将"Result .... " + a
与b
进行比较。在第二个中,您将a
与b
进行比较,因此存在差异。更改您的第一个声明如下:
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 java和this。
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