Java 7は、以下のコードのようにStrings
での切り替えをサポートします
_switch (month.toLowerCase()) {
case "january":
monthNumber = 1;
break;
case "february":
monthNumber = 2;
break;
default:
monthNumber = 0;
break;
}
_
Java String
の各ケースでequals()
メソッドを呼び出しますか?それとも_==
_またはintern()
に依存しますか?
これは単に次と同等ですか?
_String month = month.toLowerCase();
if("january".equals(month)){
monthNumber = 1;
}else if("february".equals(month)){
monthNumber = 1;
}..
_
更新:
スイッチ式の文字列は、各ケースラベルに関連付けられた式と比較されますas if _
String.equals
_メソッドが使用されていました。
ドキュメントが指摘しているように、振る舞いはequals()
が呼び出されるかのようです。
docs say
The String in the switch expression is compared with the expressions associated
with each case label as if the String.equals method were being used.
as ifと言うので、内部実装は.equals()メソッドと同じですが、そうではありません。
Java 7 switchステートメントは、実際にhashCode()
メソッドとequals()
メソッドの両方を使用するバイトコードを生成します。ハッシュコードは、より高速なスイッチルックアップを生成するために使用されます。 if-elseチェーンで得られるような等値チェックのチェーンを避けるため。
はい。
「Stringで使用されるswitchステートメントは、equals()メソッドを使用して、指定された式をcaseステートメントの各値と比較するため、大文字と小文字が区別され、式がnullの場合はNullPointerExceptionをスローします。」
switch
とともに使用されるString
ステートメントは、equals()
メソッドを使用して、指定された式をcase
ステートメントの各値と比較します。したがって、式がNullPointerException
である場合、null
をスローします。