【问题标题】:Getting strange output when printing result of a string comparison打印字符串比较的结果时得到奇怪的输出
【发布时间】:2013-08-16 18:41:33
【问题描述】:

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

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 值

【问题讨论】:

  • @roippi 你是尖头发的老板吗? ?
  • 您的输出与您的代码不一致。第三行应该只是false
  • 请检查您发布的输出是否正确。显然,开头的字符“Output-”不会出现。加上最后一个println 调用没有显示打印s3 并且中间线是可疑的。
  • @roippi 如果您雇用某人是因为他们知道字符串连接比相等比较具有更高的优先级,那么您应得的。为什么不直接问那些 Facebook 问题,“74% 的人做不到这一点。什么是 7 + 3 x 2?”
  • @LeeMeador 你是对的。我也会偷那个问题。谢谢。

标签: java string


【解决方案1】:

您缺少一组括号:

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

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

一般来说,+precedence== 高,这就是为什么"Using == ::" + s3==s4 被评估为("Using == ::" + s3) == s4

【讨论】:

  • 那么出于好奇,他的代码在评估什么?哦,我想我明白了,它是将整个字符串 +s3 与 s4 进行比较,这显然是错误的。
  • ("Using == ::" + s3) == s4
  • 常见的.equals 问题的有趣转折。 +1
  • 那么它应该打印“false”而不是“Using = ::false”。没有?
  • @LeeMeador 实际上确实只打印 false; OP的输出与他的代码不一致。
【解决方案2】:

您正在使用此代码:

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

评估为:

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

因此你得到 false 作为输出。

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

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

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

【讨论】:

  • 这是对为什么输出的最佳解释,但最好解释一下如何修复它。
  • @Michelle:IMO 首先我需要解释为什么 OP 输出错误,然后我的答案会更好地理解。请立即检查编辑。
【解决方案3】:

行是正确的:

"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

【讨论】:

  • 所以字符串连接的优先级高于比较运算符?另外......如果只是比较它为什么会打印文字字符串?
  • 那么它应该打印“false”而不是“Using = ::false”
  • 问题中的输出是错误的。我运行提供的代码并得到了预期的输出(添加到我的答案中)。
猜你喜欢
  • 1970-01-01
  • 2019-10-26
  • 1970-01-01
  • 2011-09-18
  • 1970-01-01
  • 2012-03-09
  • 1970-01-01
  • 2012-03-26
  • 2017-08-27
相关资源
最近更新 更多