【问题标题】:Why System.out.println("hey s1==s2:"+s1==s2); prints "false" as the output instead of printing "hey s1==s2:false"为什么 System.out.println("嘿 s1==s2:"+s1==s2);打印“false”作为输出而不是打印“hey s1==s2:false”
【发布时间】:2014-10-28 07:38:01
【问题描述】:

我编写了以下java代码:

String s1 = new String("shan");
String s2 = new String("shan");
String s3="shan";
String s4="shan";
System.out.println("hey s1==s2:"+s1==s2);
System.out.println("s3==s4:"+s3==s4);
System.out.println("s1.equals(s2): "+s1.equals(s2));
System.out.println("s3.equals(s4): "+s3.equals(s4));
System.out.println("s1==s3: "+s1==s3);
System.out.println("s1.equals(s3): "+s1.equals(s3));
System.out.println("hey s1==s2:"+true);

输出:

false
false
s1.equals(s2): true
s3.equals(s4): true
false
s1.equals(s3): true
hey s1==s2:true

为什么第 5 行只输出“false”而不是“hey s1==s2:false”?

【问题讨论】:

    标签: java string


    【解决方案1】:
    Line5: System.out.println("hey s1==s2:"+s1==s2);
    

    因为运算符优先级 "hey s1==s2:"+s1 先解析,然后与 s2 比较,导致错误。

    给予最高优先级来解决它以更正。括号的优先级最高。

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

    【讨论】:

    • 第 11 行发生了什么?为什么 System.out.println("嘿 s1==s2:"+true);导致 hey s1==s2:true 作为输出。为什么这里没有进行评估?
    • @ShanthaD 你在期待什么?
    • “嘿 s1==s2:”+s1 和 s2 都不是布尔值。但它仍然将“嘿 s1==s2:”+s1==s2 评估为假。同样,它会将 "hey s1==s2:"+true 评估为 false,而不是将其评估为 s1==s2:true 对吗?
    • @ShanthaD 这是因为,运算符 + 从左到右计算。看这里:stackoverflow.com/questions/17808093/…这可能会解释。
    • 是的,我同意 operator + 从左到右计算。但是例如: String x="hey s1==s2:"+s1;字符串 y=s2; System.out.println("x的值为:"+x); System.out.println("y的值为:"+y); System.out.println(x==y);输出:x 的值为:hey s1==s2:shan y 的值为:shan false "hey s1==s2:shan" == "shan" 的值是如何导致 false 的?
    【解决方案2】:
    System.out.println("hey s1==s2:"+s1==s2)
    

    评估("hey s1==s2:"+s1)==s2,即false

    这就是打印 false 的原因。

    这种行为的原因是+ 运算符的precedence 比“==”运算符高。

    以下将打印您所期望的:

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

    【讨论】:

      【解决方案3】:

      要比较字符串,您必须调用s1.equals(s2)。结果是true== 将指针与字符串进行比较,结果不一样。

      【讨论】:

      • 这并不能解释输出(为什么“嘿”等缺失)。
      【解决方案4】:

      在语句中使用括号括起单独的操作。

      使用

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-05-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-08-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多