2015-03-25 17 views
6

Baskı Sekizli karakterler

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

ı çalıştırdığınızda zaten bunu biliyorum ama sekizli değer 377'nin altında olması gerektiğini bana deme aşağıdaki kodu açıklayınız Yukarıdaki programda çıktıyı olarak aldım. Onun neden böyle olduğunu bilmek istiyorum?

Lütfen açık bir açıklama yapın. Teşekkürler

+7

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

+0

Thanq @ Phylogenesis –

cevap

7

Temel olarak, orada iki karakter var: '\70' ve '0'.

octals için çıkış sırası ise documented in the JLS olarak:

OctalEscape: 
\ OctalDigit 
\ OctalDigit OctalDigit 
\ ZeroToThree OctalDigit OctalDigit 

'7' ZeroToThree içinde olmadığı için, sizin durumda geçerli değildir Bunlardan sonuncusu, ama hem '7' ve '0 'sekizlik basamaklardır, bu yüzden ikinci kalıpla eşleşir.

Şimdi, neden sadece '\70''un neden '8' olduğunu bilmemiz gerekiyor ... çünkü sekizlik 70, ondalık 56 veya altıgen 38, yani UTF-16 code unit for '8'.

+1

Sadece bir küçük nitpick, Jon, _Unicode_ kod noktasından daha az UTF-16 kod noktası olduğunu söyleyebilirim. UTF-16, Unicode kod noktaları için sadece bir kodlama yöntemidir. – paxdiablo

+1

@paxdiablo: UTF-16 kod birimi, aslında (yanıtta sabitlenmiş) demek istedim. Bu, bir "char" bir UTF-16 kod birimi olduğundan, bir Unicode kod noktasından daha alakalı. (Özellikle, bir karakter dizisi, "charAt", "length" vb. Gibi nesneler bakımından bir UTF-16 kod birimi dizisi olarak düşünülmelidir. Kod birimlerinden daha az kod noktası olabilir ...) –