JOptionPane.showInputDialog()是否返回不同的String

时间:2013-06-30 00:45:27

标签: java string swing joptionpane string-comparison

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) ...

2 个答案:

答案 0 :(得分:3)

使用equals比较字符串而不是==

改变这个:

monthString == "2"

"2".equals(monthString) 
你的if块中的

等于比较字符串内容,而==比较对象相等。请阅读相关文章中的更多内容:

Java String.equals versus ==

还要注意针对monthStirng的反向比较“2”。如果monthString为null,这将阻止空指针异常。

答案 1 :(得分:2)

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

monthString == "2"

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

if (monthString.equals("2"))

Here更全面地概述了==.equals之间的差异。