Die Ausgabe aus dem folgenden Code ist 123
, weil substring
von beginIndex zu EndIndex - 1 übergeht. Ich bin jedoch überrascht, wie char
hier als 3 (int) verstanden wird, weil substring
zwei Ints benötigt. Was ist das Konzept dahinter?
Dies geht den ganzen Weg zurück zu C , wobei char
im Wesentlichen eine schmale ganze Zahl ist type und wird bei Bedarf implizit in int
konvertiert.
In Java wird dies technisch als "Erweiterung der Grundelementkonvertierung" bezeichnet und ist in Abschnitt 5.1.2 der JLS .
Andere haben bereits erklärt, warum es funktioniert, aber beachten Sie, dass es unpraktisch ist, char-Variablen für Indizes zu verwenden, da sie unterschiedliche Semantiken enthalten und es daher verwirrend ist, ein char als Index zu verwenden.
Verwenden Sie Zeichen nur zum Speichern von Zeichendaten und wahrscheinlich besser: Versuchen Sie, Zeichen vollständig zu vermeiden, da sie nicht einmal breit genug sind, um jedes Zeichen zu speichern (siehe Unicode- und Codepunkt-Diskussion). Verwenden Sie stattdessen int, um Zeichencodepunkte zu speichern.
Sehen Sie sich den Abschnitt 5.1 an. 2 , in der erweiterte Erweiterungen erläutert werden.
In char a = 3;
könnte man sich das als Speichern von 0011
, dem binären Wert von 3 vorstellen. Das Zeichen '3' wird nicht wirklich gespeichert: Wenn Sie versucht haben, ein char zu behandeln, erhalten Sie% co_de nicht %. Aber wenn du es gemacht hast
3
Jetzt speicherst du das char 3, einen ASCII-Wert von 51, und wenn du es wie in int ausprobierst, erhältst du 51.
Dies liegt technisch daran, dass char
ein Untertyp von int
ist.
Um festzustellen, ob substring(int,int)
auf das Argument (int,char)
anwendbar ist, versuchen wir zuerst 15.12.2.2 Phase 1: Identifizieren von Arithmethoden, die durch Subtyping anwendbar sind , wir müssen testen, ob char
ein Subtyp von int
ist. Per 4.10.1 Subtyping unter den Primitiven Typen ist es.
Um das char
Argument dem Parameter int
zuzuordnen, pro 15.12.4.5 Rahmen erstellen, Synchronisieren, Übertragungssteuerung , wenden wir 5.3 Methodenaufruf-Konvertierung , die char
in int
konvertiert, pro 5.1.2 Erweiterung der Primitive Konvertierung
Tags und Links java type-conversion