Lütfen aşağıdaki kod bölümleri yürütüldüğünde tam olarak ne olduğunu açıklayın:
int a='\15';
System.out.println(a);
bu 13 yazdırır;
int a='\25';
System.out.println(a);
bu 21 yazdırır;
int a='\100';
System.out.println(a);
bu 64 çıktı.
Lütfen aşağıdaki kod bölümleri yürütüldüğünde tam olarak ne olduğunu açıklayın:
int a='\15';
System.out.println(a);
bu 13 yazdırır;
int a='\25';
System.out.println(a);
bu 21 yazdırır;
int a='\100';
System.out.println(a);
bu 64 çıktı.
int a='\15'
ilk önce char
sekizlik sayıya dayalı bir "15" (ondalık 13, karakter olarak, ascii "Carriage Return") oluşturur ve bunu daha sonra bir int
tamsayıya dönüştürürsünüz. Karakterler 16 bitlik tam sayılar olduğu için bu yasaldır, bu nedenle güvenli bir yayındır ve Java tarafından döküm hakkında herhangi bir bildirim yayınlanmaz. Diğer cevaplar sekizlik / ondalık sayının tamamını kapsıyor.
Yanıtlar:
Bir değişkene, tek tırnakla ayrılmış bir karakter değişmezi atadınız, örneğin 'a'
(çift tırnak ile ayrılmış bir String değişmezinden farklı olarak "a"
) int
. Java, 16-bit işaretsizden char
32-bit imzalıya otomatik bir genişleme çevirimi yapar int
.
Bununla birlikte, bir karakter değişmezi bir ters eğik çizgi ve ardından 1-3 basamak olduğunda, karakterin sekizlik ( taban / taban 8) temsilidir. Böylece:
\15
= 1 × 8 + 5 = 13 (bir satırbaşı; aynı '\r'
)\25
= 2 × 8 + 5 = 21 (bir NAK karakteri - negatif alındı)\100
= 1 × 64 + 0 × 8 + 0 = 64 (@ sembolü; ile aynı '@'
)Karakter değişmezleri ve kaçış dizileri hakkında daha fazla bilgi için JLS bölümlerine bakın:
BNF'nin 3.10.6'dan alıntılanması:
OctalEscape:
\ OctalDigit
\ OctalDigit OctalDigit
\ ZeroToThree OctalDigit OctalDigit
OctalDigit: one of
0 1 2 3 4 5 6 7
ZeroToThree: one of
0 1 2 3
1-3 digits
- olmalıydı 0-3
. Ve onun 3 basamaklı sekizlik için, iki basamaklı sekizlik yine de olabilir 0-7
. ör. '\ 77' hala geçerli.
Gösterim \nnn
, Java'da sekizlik bir karakter kodunu belirtir. bu nedenle , ondalık 13 olan int a = '\15'
sekizlik karakter 15'in otomatik çevrilmiş değerini atar a
.
\nnn
yok değil Java Sekizlik bir sayıyı belirtir. OP'nin kodunda, sekizlik karakter kaçış dizisini belirtir. Çevreleyen tırnak işaretleri önemlidir. Karakter daha sonra atama ile bir tamsayı değerine genişletilir. (Sekizli sayılar baştaki sıfır hanesi ile gösterilir.)