为什么这个java字符串比较打印错误?

时间:2015-10-03 08:35:57

标签: java

我开始学习Java了,所以请原谅,如果这个问题看起来很愚蠢,我会看一些在线的例子。

我发现了一个字符串问题,输出不应该是真的吗?

我正在比较两个相等的字符串。

public class HelloWorld{

     public static void main(String []args)
     {
      String morning2 = new String("Morning");
      System.out.println("Morning" == morning2);
     }
}

对于此计划,同样不应打印True

public class HelloWorld{

     public static void main(String []args)
     {
        String str1 = new String("Paul");
        String str2 = new String("Paul");
        System.out.println(str1 == str2);
     }
}

但对于这个程序,它打印为真。

public class HelloWorld{

     public static void main(String []args)
     {
        String str3 = "Harry";
        String str4 = "Harry";
        System.out.println(str3 == str4);
     }
}

有谁可以解释为什么输出有差异?

我已经看到了这个问题并回答How do I compare strings in Java?,但它并不适合解释。

3 个答案:

答案 0 :(得分:1)

你的第一个课程的原因

public class HelloWorld{

     public static void main(String []args)
     {
      String morning2 = new String("Morning");
      System.out.println("Morning" == morning2);
     }
}

打印false是因为在这些行中

String morning2 = new String("Morning");
System.out.println("Morning" == morning2);

你正在创建不同的对象(通过新关键字)并与字符串进行比较,尽管字符串相同,你在这里比较两个不同的对象

这就是java如何在字符串池中分配字符串。

与第二个项目类似。

但是对于第3个程序,当你执行line

时会发生什么

String str3 = "Harry";

当您执行下一行

时,字符串对象Harry在字符串池中分配

String str4 = "Harry";

Java搜索String对象是否在String池中可用,因为它可用,它不会创建新的String对象,并且它从该对象本身引用。

所以你在第3节目中得到了真实。

希望我已经清除了您的查询。

答案 1 :(得分:0)

您必须使用"Morning".equals(morning2)来检查字符串对象。

看一下这篇文章: How do I compare strings in Java?

答案 2 :(得分:0)

此方法将此字符串与指定的对象进行比较。当且仅当参数不为null并且是一个表示与此对象相同的字符序列的String对象时,结果才为真。

public class HelloWorld{

     public static void main(String []args)
     {
        String str1 = new String("Paul");
        String str2 = new String("Paul");
        System.out.println(str1.equals(str2));
    }
}