Bitte erläutern Sie, was genau passiert, wenn die folgenden Codeabschnitte ausgeführt werden:
int a='\15';
System.out.println(a);
dies druckt 13 aus;
int a='\25';
System.out.println(a);
dies druckt 21 aus;
int a='\100';
System.out.println(a);
dies druckt 64 aus.
int a='\15'
Erstellt zuerst einechar
auf der Oktalzahl basierende Zahl "15" (Dezimalzahl 13, als Zeichen die ASCII "Wagenrücklauf"), die Sie dann in eineint
Ganzzahl umwandeln. Dies ist legal, da Zeichen 16-Bit-Ganzzahlen sind. Es handelt sich also um einen sicheren Upcast, und Java gibt keine Hinweise zum Casting aus. Die anderen Antworten decken bereits die gesamte Oktal- / Dezimalsache ab.Antworten:
Sie haben einer Variablen
'a'
ein Zeichenliteral zugewiesen, das durch einfache Anführungszeichen begrenzt ist, z. B. (im Gegensatz zu einem String-Literal, das durch doppelte Anführungszeichen begrenzt ist"a"
)int
. Java führt eine automatische Erweiterung von 16-Bit ohne Vorzeichenchar
auf 32-Bit mit Vorzeichen durchint
.Wenn ein Zeichenliteral jedoch ein Backslash gefolgt von 1-3 Ziffern ist, ist es eine oktale Darstellung ( Basis / Radix 8) des Zeichens. So:
\15
= 1 × 8 + 5 = 13 (ein Wagenrücklauf; wie'\r'
)\25
= 2 × 8 + 5 = 21 (eine NAK-Zeichen - negative Bestätigung)\100
= 1 × 64 + 0 × 8 + 0 = 64 (das @ -Symbol; wie'@'
)Weitere Informationen zu Zeichenliteralen und Escape-Sequenzen finden Sie in den JLS-Abschnitten:
Zitat der BNF aus 3.10.6:
quelle
1-3 digits
- Es hätte sein sollen0-3
. Und es ist für 3-stelliges Oktal, zweistelliges Oktal kann noch von haben0-7
. Ex. '\ 77' ist noch gültig.Die Notation
\nnn
bezeichnet einen oktalen Zeichencode in Java. soint a = '\15'
weist den auto-cast'ed Wert von Oktal - Charakter 15 bisa
die dezimal 13.quelle
\nnn
ist nicht eine Oktalzahl in Java bezeichnen. Im OP-Code bezeichnet es eine Escape-Sequenz mit oktalen Zeichen. Die umgebenden Anführungszeichen sind wichtig. Das Zeichen wird dann durch die Zuweisung auf einen ganzzahligen Wert erweitert. (Oktalzahlen werden durch eine führende Nullstelle gekennzeichnet.)Die Tatsache, dass Sie die Ziffern in Anführungszeichen setzen, lässt mich vermuten, dass die Zahl als Zeichenliteral interpretiert wird. Die folgenden Ziffern müssen oktal sein.
quelle