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!";
        }

month を Int に解析し、それをリテラル 2 と比較した場合にのみ機能します。元のバージョンが機能しないのはなぜですか?

int month = Integer.parseInt(monthString);
if (month == 2 && isLeap) ...
4

2 に答える 2

3

== ではなく等号を使用して文字列を比較します

これを変える:

monthString == "2"

"2".equals(monthString) 

あなたのifブロックで

等号は文字列の内容を比較し、== はオブジェクトの等号を比較します。こちらの関連​​記事から詳細をお読みください。

Java String.equals と ==

また、monthStirng に対する逆比較 "2" にも注意してください。これにより、monthString が null の場合に null ポインター例外が発生しなくなります。

于 2013-06-30T00:46:46.263 に答える
2

==文字列の比較には使用しないでください。文字列は参照型です。つまり、次のように記述します。

monthString == "2"

文字シーケンス「2」を表すかどうかをテストしていません。monthStringあなたは実際に、それに続く「2」リテラルとまったく同じオブジェクトがメモリ内にあるmonthStringかどうかをテストしています。これは、文字列がどのように宣言されているかによって、真である場合とそうでない場合がありますが、一般的には代わりにメソッドを使用する方が常に優れています。これで問題が解決するはずです:equals

if (monthString.equals("2"))

==との違いのより完全な概要を次に示します.equals

于 2013-06-30T00:50:25.617 に答える