我开始学习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?,但它并不适合解释。
答案 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));
}
}