问题: 所以第一个窗口会显示它是什么日子。我键入当天,弹出的唯一内容是错误消息,告诉我检查我的拼写和标点符号。为什么窗户上没有当天的实际汤?
// *********** *********
公共课IfSoupDay {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
String day = JOptionPane.showInputDialog(null,"I am going to tell you"
+ " what the soup of the day is."+ "\n"
+ "\n"+"What day of the week is it?");
if (day == "Monday")
JOptionPane.showMessageDialog(null, "The soup of the day is Lobster Soup");
else if(day == "Tuesday")
JOptionPane.showMessageDialog(null,"The soup of the day is Potato Soup");
else if (day == "Wednesday")
JOptionPane.showMessageDialog(null, "The soup of the day is Chicken Noodle Soup");
else if (day == "Thursday")
JOptionPane.showMessageDialog(null, "The soup of the day is Goat Soup");
else if (day == "Friday")
JOptionPane.showMessageDialog(null,"The soup of the day is Booty Chunks");
else if (day == "Saturday" || day == "Sunday")
JOptionPane.showMessageDialog(null, "Sorry we are closed", "Closed",
JOptionPane.ERROR_MESSAGE);
else
JOptionPane.showMessageDialog(null,"Be sure to check spelling and punctuation "
+ "such as capitals", "Sorry, not a day", JOptionPane.ERROR_MESSAGE);
}//end main
}
答案 0 :(得分:1)
您正在将字符串文字与参考进行比较。
使用day.equals("Monday")
代替day == "Monday"
这是使用Java实现字符串的结果,因为它比较了代码中字符串文字的哈希码,这些代码不相同。
例如,拿两个字符串:
String lol = "lol";
String lol2 = "lol";
System.out.println( (lol == lol2) ); // This prints "False"
System.out.println( lol.equals(lol2) ); // This prints "True"
当您直接比较任何对象(String
时,作为大写类是一个对象而不是像int
或float
或char
这样的原语与另一个对象,它不会比较对象内部的内容。相反,它会比较哈希码,以便您比较两个不同的引用。
lol
和lol2
可能同时打印lol
,但仅仅因为它们具有相同的内容并不意味着它们是相同的"容器"可以这么说。这是相关的,因为您的代码使用String文字,该文字具有Java必须引用的哈希代码以进行比较。
.equals()
方法允许Java将String与String进行比较,因为这样做必须按字符顺序完成。这是底层C的结果,以及C如何处理字符串,尽管C和Java字符串之间存在根本区别。
例如,比较C(char *
)中的字符串,只会将指向第一个字符的指针值与比较char *
中第一个字符的指针进行比较。因此,通过char * lol
等价运算符比较char * lol2
和==
的结果在C中基本相同,但存在细微差别(哈希代码,Java中的对象字符串等)
充分理解为什么会出现这种情况非常重要,因为它基本上是传递引用面向对象编程中的基石概念之一。
答案 1 :(得分:0)
好了多一点研究我发现我必须在if括号中使用equals方法,但我不确定为什么会有人帮我理解那会很酷。