2012-06-18 40 views
8

Hãy thử đoạn mã này -Tại sao System.out.println() chấm dứt tại ASCII Mã zero

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?"); 
    } 
} 

Đầu ra là -

c--> 

Tại sao System.out.println() chấm dứt ở mã ASCII bằng không?

tôi đã cố gắng này trong JCreator LE hệ điều hành Windows 7.

+1

Có thể được chuyển từ chuỗi được kết thúc theo kiểu C. – Mysticial

+0

Nó in cho tôi. \ u0000 là một ký tự null nhưng Java không chấm dứt chuỗi bằng một null. –

+0

Nó in tốt cho tôi ... – NominSim

Trả lời

18

Nó phụ thuộc vào những gì bạn console không (hoặc bất cứ điều gì khác là xử lý System.out). System.out sẽ truyền bá tất cả thông tin tốt và nếu bảng điều khiển của bạn không có ý nghĩa cụ thể đối với U + 0000 thì tất cả sẽ tốt. Tuy nhiên, nhiều điều khiển giao diện người dùng sẽ coi đó là ký tự chấm dứt. Đây không phải là "lỗi" của Java - đó là điều khiển giao diện người dùng.

(Chỉ để tham khảo, chạy mã trong một dấu nhắc lệnh Windows trên Windows 7 là tốt cho tôi.)

+0

Ok !! Cám ơn vì cái này! – CodeBlue

+9

OMG là Jon Skeet! Không thể ... dừng lại ... upvoting !! –

+0

Có, chỉ cần tôi đã thử nó trên Windows Command Prompt và nó đã làm việc ở đó. – CodeBlue

2

Trong C/C++ kiểu chuỗi sự kết thúc của chuỗi được xác định bởi vị trí của null chấm dứt -character (ký tự có giá trị 0, như trong trường hợp của bạn). Nhiều khả năng cuộc gọi System.out.println() chuyển chuỗi này sang nguyên văn OS, cho rằng chuỗi kết thúc bằng ký tự null và chỉ in tới điểm đó

Các vấn đề liên quan