JOptionPane.showInputDialog()
返回的字符串是否与常规字符串不同?当我尝试将它与"2"
进行比较时,它返回false并转到else块。
// Prompt user for the month
String monthString = JOptionPane.showInputDialog(
"Enter which month are you looking for: ");
// SMALL Months, ie: 2, 4, 6, 9, 11
else {
// Special case on February
if (monthString == "2" && isLeap)
result += "29 days!";
else if (monthString == "2")
result += "28 days!";
// Everytime my code to go to this block instead
else
result += "30 days!";
}
只有当我将月份解析为Int并将其与文字2进行比较时才能工作。为什么我的原始版本不起作用?
int month = Integer.parseInt(monthString);
if (month == 2 && isLeap) ...
答案 0 :(得分:3)
使用equals比较字符串而不是==
改变这个:
monthString == "2"
到
"2".equals(monthString)
你的if块中的
等于比较字符串内容,而==比较对象相等。请阅读相关文章中的更多内容:
还要注意针对monthStirng的反向比较“2”。如果monthString为null,这将阻止空指针异常。
答案 1 :(得分:2)
永远不要使用==
来比较字符串。字符串是引用类型,这意味着当你写:
monthString == "2"
您不测试monthString
是否代表字符序列" 2"。实际上,您正在测试monthString
是否与内存中的相同对象与" 2"随之而来的文字。这可能是也可能不是,这取决于如何声明字符串,但通常最好使用equals
方法。这应该可以解决您的问题:
if (monthString.equals("2"))
Here更全面地概述了==
和.equals
之间的差异。