1

返回的字符串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) ...
4

2 回答 2

3

使用等于比较字符串而不是 ==

改变这个:

monthString == "2"

"2".equals(monthString) 

在你的 if 块中

Equals 比较字符串内容,而 == 比较对象相等性。从此处的相关帖子中阅读更多信息:

Java String.equals 与 ==

另请注意与monthStirng 的反向比较“2”。这将防止在 monthString 为空的情况下出现空指针异常。

于 2013-06-30T00:46:46.263 回答
2

永远不要==用来比较字符串。字符串是引用类型,这意味着当您编写时:

monthString == "2"

不是在测试是否monthString代表字符序列“2”。您实际上是在测试内存中的对象是否monthString与其后面的“2”文字完全相同。这可能是真的,也可能不是真的,这取决于如何声明字符串,但通常最好使用该equals方法。这应该可以解决您的问题:

if (monthString.equals("2"))

以下==是对和之间差异的更完整概述.equals

于 2013-06-30T00:50:25.617 回答