2012-06-18 25 views
8

sonlanan yapar -Neden Bu kod parçasını deneyin System.out.println() ASCII kodu sıfır

public class WhitespaceTest 
{ 
    public static void main(String[] args) 
    { 
     int x = 0; 
     char c = (char) x; 
     System.out.println("c-->"+c+"<---this doesn't print?"); 
    } 
} 

çıkışı -

c--> 

neden System.out.println() ASCII kodunda sıfır mı?

Ben Bu sizin konsol yapar (veya herhangi başka System.out işleyen) bağlıdır Windows 7

+1

yazdırabildiği, muhtemelen C stili nul sonlandırılmış dizelerden taşınır. – Mysticial

+0

Benim için yazdırır. \ u0000 boş bir karakter ancak Java dizeleri bir null ile sonlandırmıyor. –

+0

Bu benim için iyi yazdırıyor ... – NominSim

cevap

18

altında JCreator LE bu denedik. System.out tüm bilgileri sadece iyi bir şekilde yayıyor ve konsolunuz U + 0000'e özel bir anlam yüklemiyorsa, hepsi iyi olacak. Ancak, birçok UI denetimi sonlandırıcı bir karakter olarak ele alır. Bu Java'nın "hatası" değil - UI kontrolünün kendisi.

C/C

(Sadece başvuru için, Windows 7 üzerinde bir Windows komut istemi içinde bu kodu çalıştırarak benim için gayet iyi.)

+0

üzerindeki çıkışı durdurmuyor Tamam! Bunun için teşekkürler! – CodeBlue

+9

OMG, Jon Skeet! Durup ... kesilemez! –

+0

Evet, sadece Windows Komut İstemi üzerinde denedim ve orada çalıştı. – CodeBlue

2

++ tarzı dizeleri dize sonu sonlandırıcı boş konumuna göre belirlenir -character (davasında olduğu gibi 0 değeriyle karakter). Büyük olasılıkla, System.out.println() çağrısı, dizeyi null karakterinde sona erdiğini düşünen ve yalnızca bu noktaya kadar