2015-03-25 12 views
6

Si prega di spiegare il codice qui sottostampa ottali caratteri in Java utilizzando sequenze di escape

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

Per favore non mi dire che il valore ottale deve essere inferiore a 377. Lo so già, ma quando ho eseguito il sopra il programma, ottengo l'output come . Voglio sapere perché sta succedendo così?

Si prega di fornire una spiegazione chiara. Grazie

+7

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

+0

Thanq @ Phylogenesis –

risposta

7

Fondamentalmente, ci sono due caratteri: '\70' e '0'.

La sequenza di escape per ottali è documented in the JLS come:

OctalEscape: 
\ OctalDigit 
\ OctalDigit OctalDigit 
\ ZeroToThree OctalDigit OctalDigit 

L'ultimo di questi non si applica nel tuo caso, come '7' non è in ZeroToThree, ma entrambi '7' e '0 'sono cifre ottali, quindi corrispondono al secondo modello.

Quindi, ora abbiamo solo bisogno di sapere perché '\70' è '8' ... ed è perché l'ottale 70 è decimale 56 o esadecimale 38, che è il UTF-16 code unit for '8'.

+1

Solo un piccolo nitpick, Jon, direi che è meno il punto di codice UTF-16 del punto di codice _Unicode_. UTF-16 è solo un metodo di codifica per i punti di codice Unicode. – paxdiablo

+1

@paxdiablo: Intendevo unità di codice UTF-16, in realtà (fissa nella risposta) - che è più rilevante di un punto di codice Unicode, dato che 'char' è un'unità di codice UTF-16. (In particolare, una stringa deve essere considerata come una sequenza di unità di codice UTF-16, in termini di cose come 'charAt',' length' ecc. Possono esserci meno punti di codice rispetto alle unità di codice ...) –