2011-12-25 42 views
29

Trong chương trình sauĐịnh dạng sử dụng printf và định dạng

class ZiggyTest2 { 

    public static void main(String[] args){  

     double x = 123.456; 
     char c = 65; 
     int i = 65; 

     System.out.printf("%s",x); 
     System.out.printf("%b",x); 
     System.out.printf("%c",c); 
     System.out.printf("%5.0f",x); 
     System.out.printf("%d",i); 
    }  
} 

Đầu ra là

123.456trueA 12365 

Ai đó có thể vui lòng giải thích làm thế nào một giá trị gấp đôi (tức là 123.456) được chuyển thành một boolean (ví dụ. true)

Lý do tôi hỏi là vì tôi biết java không cho phép số được sử dụng cho các giá trị boolean. Ví dụ, sau đây là không được phép trong Java

if (5) { 
//do something 
} 

Cảm ơn

+0

Tôi nghĩ rằng nó rất hay để chỉ ra rằng có một sự khác biệt quan trọng giữa việc sử dụng các phép toán luận trong 'if' báo cáo so với trong' printf'. Nghĩa là, một câu lệnh 'if' yêu cầu một boolean' nguyên gốc (hoặc một đối tượng' Boolean', mà sẽ được unboxed). Vì vậy, bất kỳ giá trị không boolean nào đều không được phép. Tuy nhiên, 'printf' yêu cầu đối số của nó là kiểu' Đối tượng', tức là bất kỳ loại nào. Vì vậy, trình biên dịch không đặt bất kỳ hạn chế nào về các đối số cho 'printf': ngay cả khi chúng là các kiểu nguyên thủy như' boolean', chúng có thể được đóng hộp (thành 'Boolean'). Đây là lý do tại sao bạn có thể truyền các kiểu không mong muốn tới 'printf' nhưng không chuyển thành' if'. –

Trả lời

96

cho "% b": Nếu đối số arg là null, thì kết quả là "sai". Nếu arg là một boolean hoặc Boolean, thì kết quả là chuỗi được trả về bởi String.valueOf(). Nếu không, kết quả là "true".

reference

+4

Vâng, vì vậy nếu bạn là nhà phát triển C, hãy cẩn thận, bởi vì String.format ("% b", 0) và String.format ("% b", 1) cả hai sẽ trả về "true" –

0

Bởi vì giá trị là loại double và đây là cách %b chuyển đổi làm việc với các giá trị thuộc loại này.

10

API documentation dường như nêu rõ lý do.

Nếu đối số arg là null, thì kết quả là "sai". Nếu arg là boolean hoặc Boolean, thì kết quả là chuỗi được trả về bởi String.valueOf(). Nếu không, kết quả là "true".

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