使用`==`比较字符串

att*_*raj 0 java string

String s5="Ram";
String s6="Ram";

System.out.println("  s5==s6  is " + s5==s6);  // false
System.out.println(s5==s6);  // true
Run Code Online (Sandbox Code Playgroud)

为什么第一行是false第二行true总是?

Ama*_*dan 5

由于+优先级高于==

" s5==s6 is "+s5==s6
Run Code Online (Sandbox Code Playgroud)

评估为

" s5==s6 is Ram"=="Ram"
Run Code Online (Sandbox Code Playgroud)

这显然是错误的。您可以通过使用括号来避免此特定问题:

" s5==s6 is "+(s5==s6)
Run Code Online (Sandbox Code Playgroud)

与此同时,

s5==s6
Run Code Online (Sandbox Code Playgroud)

评估为

"Ram"=="Ram"
Run Code Online (Sandbox Code Playgroud)

仅是因为 Java中字符串文字的自动中间化才是正确的。如果比较这些字符串中的一个而不是文字,则该字符串为假,因为==比较对象标识,并且两个不同的String对象即使内容相同,也将被评估为不同。比较

String s5 = new String("Ram");
String s6 = new String("Ram");
System.out.println(s5==s6); //false
Run Code Online (Sandbox Code Playgroud)

使用.equals为字符串内容有意义的比较:

System.out.println(s5.equals(s6)); //true
Run Code Online (Sandbox Code Playgroud)