Ответ 1
Да, переключатель со строкой - это синтаксический сахар. Из здесь
1) Строки в Switch - это синтаксический сахар, без изменения уровня JVM.
2) Внутри он использует метод equals для сравнения, что означает, если вы передать null, он будет вызывать java.lang.NullPointerException, поэтому остерегайтесь что.
3) Строки в операторах switch чувствительны к регистру, предпочитают использовать только один случай и преобразовать ввод в предпочтительный случай, прежде чем передавать их switch.
Также проверьте Как работает String в Switch в Java 7
Из той же ссылки, если вы видите пример:
public class StringInSwitchCase{
public static void main(String[] args) {
String mode = args[0]; switch (mode) {
case "ACTIVE": System.out.println("Application is running on Active mode");
break;
case "PASSIVE": System.out.println("Application is running on Passive mode");
break;
case "SAFE": System.out.println("Application is running on Safe mode");
} } }
и декомпилированный код:
import java.io.PrintStream;
public class StringInSwitchCase{
public StringInSwitchCase() { }
public static void main(string args[]) {
String mode = args[0]; String s;
switch ((s = mode).hashCode()) {
default: break;
case -74056953: if (s.equals("PASSIVE")) {
System.out.println("Application is running on Passive mode"); }
break;
case 2537357: if (s.equals("SAFE")) { System.out.println("Application is running on Safe mode"); }
break;
case 1925346054: if (s.equals("ACTIVE")) { System.out.println("Application is running on Active mode"); }
break; } } }
вы узнаете, что String в Switch работает с помощью методов hashCode()
и equals()
.
Как и ожидалось, он использует метод hashCode() для переключения и equals() метод проверки, это означает, что это просто синтаксический сахар, а не встроенные встроенные функции.