web-dev-qa-db-fra.com

Java 7 instruction switch avec String utilise la méthode equals ()?

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

31
Narendra Pathai

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

29
Aniket Thakur

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.

9
Steinar

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

http://Java.dzone.com/articles/new-Java-7-feature-string

6
Benjamin Dale

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.

4
Juned Ahsan

J'ai trouvé un article utile qui explique comment la commutation de chaîne est implémentée dans Java 7

1
Saurab Parakh