Java 7 prend en charge la commutation avec Strings
comme le code ci-dessous
switch (month.toLowerCase()) {
case "january":
monthNumber = 1;
break;
case "february":
monthNumber = 2;
break;
default:
monthNumber = 0;
break;
}
Java appelle la méthode equals()
sur chaque String
cas? Ou s'appuie-t-il sur ==
Ou intern()
?
Est-ce simplement équivalent à:
String month = month.toLowerCase();
if("january".equals(month)){
monthNumber = 1;
}else if("february".equals(month)){
monthNumber = 1;
}..
MISE À JOUR:
La chaîne dans l'expression de commutateur est comparée aux expressions associées à chaque étiquette de cas comme si la méthode
String.equals
Était utilisée.
Comme le soulignent les documents, le comportement est comme si equals()
était appelé.
Les docs disent
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.
Puisqu'il dit comme si je suppose que ce n'est pas le cas, bien que l'implémentation interne soit la même que la méthode .equals ().
L'instruction de commutateur Java 7 génère en fait un bytecode qui utilise à la fois les méthodes hashCode()
et equals()
. Le code de hachage est utilisé pour générer des recherches de commutateur plus rapides; ie pour éviter une chaîne de contrôles égaux comme vous obtiendriez avec une chaîne if-else.
Oui.
"L'instruction switch lorsqu'elle est utilisée avec une chaîne utilise la méthode equals () pour comparer l'expression donnée à chaque valeur de l'instruction case et est donc sensible à la casse et lèvera une exception NullPointerException si l'expression est nulle."
L'instruction switch
lorsqu'elle est utilisée avec une String
utilise la méthode equals()
pour comparer l'expression donnée à chaque valeur de l'instruction case
et est donc cas- sensible et lancera un NullPointerException
si l'expression est null
.
J'ai trouvé un article utile qui explique comment la commutation de chaîne est implémentée dans Java 7