2
3 /**
4 * Testprogramm zur Java String-switch-Anweisung.
5 * @author H.Drachenfels
6 * @version 24.11.2025
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 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@", "D!", "EF":
39 System.out.println("case \"C@\" und \"D!\" und \"EF\"");
40 break;
41 default:
42 System.out.println("default");
43 }
44
45 // Implementierungstechnik für Java String switch:
46 // maximal 2 String-Vergleiche und eine Hashcode-Berechnung
47 {
48 int ordinal = -1;
49 switch (s.hashCode()) {
50 // case 'A' * 31 + '?', 'B' * 31 + ' ':
51 case 2078:
52 if (s.equals("A?")) {
53 ordinal = 0;
54 } else if (s.equals("B ")) {
55 ordinal = 1;
56 }
57 break;
58 // case 'C' * 31 + '@', 'D' * 31 + '!':
59 case 2141:
60 if (s.equals("C@")) {
61 ordinal = 2;
62 } else if (s.equals("D!")) {
63 ordinal = 3;
64 }
65 break;
66 // case 'E' * 31 + 'F':
67 case 2209:
68 if (s.equals("EF")) {
69 ordinal = 4;
70 }
71 break;
72 default:
73 }
74
75 switch (ordinal) {
76 case 0:
77 System.out.println("case \"A?\"");
78 break;
79 case 1:
80 System.out.println("case \"B \"");
81 break;
82 case 2, 3, 4:
83 System.out.println("case \"C@\" und \"D@\" und \"EF\"");
84 break;
85 default:
86 System.out.println("default");
87 }
88 }
89 }
90 }
91 }
92