【问题标题】:System.out.println(); prints false with == operator [duplicate]System.out.println();使用 == 运算符打印 false [重复]
【发布时间】:2018-07-14 20:14:14
【问题描述】:

你能解释一下为什么输出是这样的

false

而不是

abcd abc false

代码:

public class StringDemo{
    public static void main(String [] args){
        String s1 = "abc";
        String s2 = s1;
        s1+="d";
        System.out.println(s1+ " "+ s2 +" "+ s1==s2); //false
    }
}   

【问题讨论】:

  • @PradeepSimha 不完全是。正如安迪在他的回答中所显示的那样。此外,这取决于 OP 是否使用 == 进行引用相等,这对 == 运算符有效,或者需要使用 equals 的内容相等。
  • 我不知道为什么这个问题会受到如此多的反对。这不是关于非常简单和常见的equals vs == 问题(尽管使用equals 可以解决OP 问题),而是关于+(连接)与== 优先级。对于已经知道答案的我来说,找到带有解释的重复问题并不容易,所以我想对于不知道发生了什么事情的 OP 来说,找到正确答案会更加困难。
  • 您似乎不小心用完全不同的问题覆盖了您的问题。我为你解开了那个。请使用“”按钮提出不同的问题。欢迎对此问题进行改进,但不应从根本上对其进行更改以致现有答案无效。
  • 我已禁用提出新问题

标签: java string


【解决方案1】:

由于+== 的相对优先级,它会打印错误。 + 的优先级更高,所以相当于:

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

所以System.out.println 的参数是布尔值,而不是字符串。

加括号:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多