1 // StringSwitch.java
2
3 /** 4 * Testprogramm zur Java 7 String-switch-Anweisung. 5 * @author H.Drachenfels 6 * @version 20.11.2019 7 */
8 public final class StringSwitch {
9 private StringSwitch() { }
10
11 /** 12 * Startpunkt des Programms. 13 * @param args Test-Strings 14 */
15 public static void main(String[] args) {
16 for (String s : args) {
17 System.out.printf("\"%s\".hashCode() = %d%n", s, s.hashCode());
18
19 // String-Vergleich mit if-else: maximal 5 String-Vergleiche
20 if (s.equals("A?")) {
21 System.out.println("case \"A?\"");
22 } else if (s.equals("B ")) {
23 System.out.println("case \"B \"");
24 } else if (s.equals("C@") || s.equals("D!") || s.equals("EF")) {
25 System.out.println("case \"C@\" und \"D!\" und \"EF\"");
26 } else {
27 System.out.println("default");
28 }
29
30 // String-Vergleich mit Java 7 String switch
31 switch (s) {
32 case "A?":
33 System.out.println("case \"A?\"");
34 break;
35 case "B ":
36 System.out.println("case \"B \"");
37 break;
38 case "C@":
39 case "D!":
40 case "EF":
41 System.out.println("case \"C@\" und \"D!\" und \"EF\"");
42 break;
43 default:
44 System.out.println("default");
45 }
46
47 // Implementierungstechnik fuer Java 7 String switch:
48 // maximal 2 String-Vergleiche und eine Hashcode-Berechnung
49 {
50 int ordinal = -1;
51 switch (s.hashCode()) {
52 // case 'A' * 31 + '?':
53 // case 'B' * 31 + ' ':
54 case 2078:
55 if (s.equals("A?")) {
56 ordinal = 0;
57 } else if (s.equals("B ")) {
58 ordinal = 1;
59 }
60 break;
61 // case 'C' * 31 + '@':
62 // case 'D' * 31 + '!':
63 case 2141:
64 if (s.equals("C@")) {
65 ordinal = 2;
66 } else if (s.equals("D!")) {
67 ordinal = 3;
68 }
69 break;
70 // case 'E' * 31 + 'F':
71 case 2209:
72 if (s.equals("EF")) {
73 ordinal = 4;
74 }
75 break;
76 default:
77 }
78
79 switch (ordinal) {
80 case 0:
81 System.out.println("case \"A?\"");
82 break;
83 case 1:
84 System.out.println("case \"B \"");
85 break;
86 case 2:
87 case 3:
88 case 4:
89 System.out.println("case \"C@\" und \"D@\" und \"EF\"");
90 break;
91 default:
92 System.out.println("default");
93 }
94 }
95 }
96 }
97 }
98