Übergabe von char an eine Methode mit einem int-Parameter

8

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?

%Vor%     
Hussein Zawawi 28.10.2011, 16:08
quelle

7 Antworten

12

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 .

    
NPE 28.10.2011, 16:10
quelle
3

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.

    
Puce 28.10.2011 16:30
quelle
0

Die Funktionsdeklaration der Teilzeichenfolge sieht wie eine Teilzeichenfolge aus (int startIndex, int endIndex). Jetzt, wenn Sie char übergeben, wird es automatisch auf ganzzahlig (endIndex) hochgestuft und daher als int behandelt.

    
Saurabh 28.10.2011 16:11
quelle
0

Sehen Sie sich den Abschnitt 5.1 an. 2 , in der erweiterte Erweiterungen erläutert werden.

    
Paul Whitehurst 28.10.2011 16:12
quelle
0

Dies wird als implizites Casting bezeichnet. Das gleiche passiert, wenn Sie einem Double einen int-Wert zuweisen. Schnelles Beispiel

%Vor%

1 ist ein int , wird aber implizit in double (1.0) umgewandelt.

    
Eric 28.10.2011 16:16
quelle
0

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.

    
Nick Rolando 28.10.2011 16:33
quelle
0

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

    
irreputable 28.10.2011 18:20
quelle

Tags und Links