我在Facebook小组中遇到过这个问题。我知道我应该使用equals()
方法,但我想知道为什么会发生这种情况
class Main
{
public static void main (String[] args)
{
String s1="abc:5";
String s2="abc:5";
System.out.println(s1==s2);
System.out.println("s1 == s2 " + s1==s2);
}
}
输出
true
false
答案 0 :(得分:16)
这是由于运营商的优先级。 '+'的优先级高于==。您实际上是在比较(“s1 == s2”+ s1)和s2。
答案 1 :(得分:6)
混乱是按操作顺序排列的。发生的事情是,您正在联接"s1 == s2 "
和s1
,然后在该结果和==
上使用s2
。
它们是不同的对象,因此打印false
(并且不打印"s1 == s2"
)。括号:
System.out.println("s1 == s2 " + (s1==s2));
这将打印s1 == s2 true
,因为s1
和s2
都引用相同的字符串字面值"abc:5"
。
答案 2 :(得分:5)
哦,我只是在代码中进行了一些更改,让+
首先"s1 == s2 s1"
然后==
s2
,而不是class Main
{
public static void main (String[] args)
{
String s1="abc:5";
String s2="abc:5";
System.out.println(s1==s2);
System.out.println("s1 == s2 " + (s1==s2));
System.out.println("s1 == s2 " + s1==s2);
}
}
。新代码
true
s1 == s2 true
false
输出
{{1}}
答案 3 :(得分:2)
这很容易理解一旦你想到它:2. println首先添加“s1 == s2”和你的字符串s1然后将它与s2进行比较,所以它输出false,因为“s1 == s2abc:5 “不是”abc:5“
答案 4 :(得分:2)
添加字符串"s1 == s2 " + s1
,然后计算它是否等于s2
。它不是打印false
。
Java Operator Precedence可能会对您有所帮助。
答案 5 :(得分:2)
我认为在使用“==”时,系统只会检查两个东西是否在系统内存中共享相同的位置。但是,如果使用“.equals”方法,系统将检查两个字符串是否共享相同的字符。
答案 6 :(得分:1)
我认为这是因为运算符优先级如此,如果你执行System.out.println(""+(s1==s2));
,它将打印为true。
答案 7 :(得分:1)
您的代码
System.out.println(s1==s2);
System.out.println("s1 == s2 " + s1==s2);
因为s1和s2是相同的字符串文字
`s1==s2` is true
因此代码可以写成
System.out.println(true); => true
System.out.println("true" + s1==s2);
现在,“true”+ s1 == s2被理解为(“true”+ s1)== s2,因为给予“+”的优先级更高。因此
"true"+s1 => trueabc:5 and
s2 => "abc:5"
因此
System.out.println("true" + s1==s2); => false