双引号中的内容未打印到System.out

3
在这个程序中,我使用了System.out.println
双引号内的内容没有被打印出来?
public class Demo1 {

    public static void main(String[] args) {

        String s1 = new String("suresh");
        String s2 = "suresh";

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

预期输出:s2==s1::FALSE
实际输出:FALSE
3个回答

8
由于运算符优先级,+ 运算符的优先级高于 == 运算符。
这个表达式:"s2==s1::"+s2==s1("s2==s1::" + s2) == s1 等价。
换句话说,它检查 "s2==s1::" + s2 是否等于 s1,然后打印该比较的结果(为 false)。
请尝试以下代码:
System.out.println("s2==s1::" + (s2 == s1));

非常感谢您,Jesper。 - Suresh Kumar Msk

5

进行这个操作

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

这与做

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

由于运算符的优先级: + 运算符的优先级高于 == 运算符。
因此您只会得到 truefalse
因为您正在将字符串文字 s2 == s1 :: 与变量 s2 连接起来,并将该引用与变量 s1 进行比较。
使用括号可以解决这个问题。

我认为这是因为使用了括号,但没有像其他答案那样解释在哪里。 - Nick stands with Ukraine

3
s2==s1放入括号中以改变运算符的优先级。
System.out.println("s2==s1::"+(s2==s1));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接