2015-03-25 16 views
6

Bitte erläutern Sie den Code untenPrinting Octal Zeichen in Java unter Verwendung von Escape-Sequenzen

public class Example{ 
    public static void main(String[] args) 
    { 
     int i[]={9}; 
     System.out.println("\700"); 
    } 
} 

Bitte sagen Sie mir nicht, dass der Oktalwert geringer sein sollte als 377. Ich weiß es schon, aber wenn ich das laufen über Programm, bekomme ich den Ausgang als . Ich möchte wissen, warum es so passiert?

Bitte geben Sie eine klare Erklärung. Danke

+7

'" \ 700 "==" \ 70 "+" 0 "==" 8 "+" 0 "==" 80 "'. – Phylogenesis

+0

Thanq @ Phylogenesis –

Antwort

7

Grundsätzlich haben Sie zwei Zeichen dort: '\70' und '0'.

für octals Die Escape-Sequenz ist documented in the JLS wie:

OctalEscape: 
\ OctalDigit 
\ OctalDigit OctalDigit 
\ ZeroToThree OctalDigit OctalDigit 

Die von diesen zuletzt in Ihrem Fall nicht anwendbar ist, wie '7' nicht in ZeroToThree ist, aber beide '7' und ‚0 'sind oktale Ziffern, also entspricht es dem zweiten Muster.

Also, jetzt müssen wir nur wissen, warum '\70' ist "8" ... und das ist, weil Oktal 70 Dezimal 56 oder Hex 38 ist, die UTF-16 code unit for '8' ist.

+1

Nur ein kleiner Nitpick, Jon, würde ich sagen, es ist weniger der UTF-16 Codepunkt als der _Unicode_ Codepunkt. UTF-16 ist nur eine Codierungsmethode für Unicode-Codepunkte. – paxdiablo

+1

@paxdiablo: Ich meinte UTF-16-Code-Einheit, eigentlich (in der Antwort behoben) - das ist relevanter als ein Unicode-Codepunkt, da ein 'char' eine UTF-16-Code-Einheit ist. (Insbesondere sollte ein String als eine Folge von UTF-16-Code-Einheiten betrachtet werden, in Bezug auf Dinge wie 'charAt',' length' usw. Es kann weniger Code-Punkte als Code-Einheiten geben ...) –