Java string == Vs Equals在与串联组合时给出true或false

我肯定错过了一些东西

public static void main(String []args){ String s1 = "abc"; String s2 = "abc"; System.out.println(s1 == s2);//gives true } public static void main(String []args){ String s1 = "abc"; String s2 = "abc"; System.out.println("s1 == s2 is:" + s1 == s2); //gives false } 

与运算符优先级有关?

是的, +运算符的优先级高于== ,因此您将字符串"s1 == s2 is:abc""abc" 。 您始终可以使用括号强制显式操作顺序。

对。 它被评估为:

 ("s1 == s2 is:" + s1) == s2 

正如其他人所回答的那样,’+’运算符的优先级高于’==’。 如果将比较括在括号内,如

  System.out.println("s1 == s2 is"+(s1 == s2)); 

由于括号的优先级高于+,因此上述陈述将给出。

如果你觉得为什么字符串s1和s2指的是相同的内存位置,那么这是因为字符串文字池的概念。

老兄你不应该使用==进行字符串比较而是使用equals方法。

 string1.equals(string2) 

+ opertator具有更高的预测性然后==所以你做“s1 == s2是:abc”到“abc”。

注意,使用equal或equalIgnoreCase来比较String总是因为==总是比较引用