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
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'. –