17

我遇到了这条线的问题(在下面评论):

System.out.println("Using == ::"+s3==s4)

哪个输出false

但是,System.out.println(s3==s4)输出true.

现在,我无法理解为什么会得到这个结果:

public class string {
    public static void main(String[] args){
        String s3="Shantanu";
        String s4=s3;
        String s1=new String("java");
        String s2=new String("javaDeveloper");

        System.out.println("Using Equals Method::"+s1.equals(s2));
        System.out.println("Using Equals Method::"+s3.equals(s4));
        System.out.println("Using == ::"+s3==s4);//Problem is here in this line
        System.out.println(s1+"Directly printing the s2 value which is autocasted from superclass to string subclass ");
        System.out.println("Directly printing the s1 value which is autocasted from superclass to string subclass "+s2);
        System.out.println(s3);
    }
}
输出使用等于方法::false
使用等于方法::true
使用 == ::false
java直接打印从超类自动转换为字符串子类的s2值
直接打印从超类自动转换为字符串子类 javaDeveloper 的 s1 值
4

3 回答 3

35

您缺少一组括号:

System.out.println("Using == ::" + (s3==s4));

在您的版本中,"Using == ::" + s3正在通过==to进行比较s4,这不是您想要的。

通常,+优先级高于==,这就是为什么"Using == ::" + s3==s4被评估为("Using == ::" + s3) == s4

于 2013-08-14T17:14:28.173 回答
14

您正在使用此代码:

System.out.println("Using == ::"+ s3==s4);

被评估为:

System.out.println( ("Using == ::" + s3) == s4);

因此,您得到错误的输出。

原因是运算符优先级+高于==Operator Precedence表:http ://docs.oracle.com/javase/tutorial/java/nutsandbolts/operators.html

正如其他答案所说,您需要使用括号括起您的布尔表达式:

System.out.println("Using == ::" + (s3==s4));
于 2013-08-14T17:16:05.263 回答
5

该行是正确的:

"Using == ::"+s3不等于s4

您需要更改代码:

"Using == ::"+(s3==s4)

编辑: 给定代码的输出是:

Using Equals Method::false
Using Equals Method::true
false
javaDirectly printing the s2 value which is autocasted from superclass to string subclass 
Directly printing the s1 value which is autocasted from superclass to string subclass javaDeveloper
Shantanu
于 2013-08-14T17:15:21.310 回答