2011-12-25 46 views
29

在下面的程序格式化用printf和格式

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

輸出是

123.456trueA 12365 

是否有人可以解釋的雙精度值(即123.456)如何轉換爲一個布爾(即true

我問的原因是因爲我知道java不允許將數字用於布爾值。例如,下面是Java不允許

if (5) { 
//do something 
} 

感謝

+0

我覺得這是很好的指出,還有就是使用布爾值之間的重要區別在'if'陳述與在'printf'。也就是說,一個'if'語句需要一個原始的'boolean'(或一個'Boolean'對象,它將被拆箱)。所以任何非布爾值都是不允許的。然而,'printf'要求它的參數是'Object'類型,即任何類型。因此,編譯器不會對'printf'的參數進行任何限制:即使它們是像'boolean'這樣的基本類型,它們也可以被裝箱(布爾型)。這就是爲什麼你可以傳遞意想不到的類型到'printf'而不是'if'。 – 2016-06-04 02:41:03

回答

96

爲 「%B」:如果參數arg爲null,則結果爲 「假」。如果arg是布爾值或布爾值,那麼結果是由String.valueOf()返回的字符串。否則,結果是「真」。

reference

+4

是的,所以如果你是C開發者,要小心,因爲String.format(「%b」,0)和String.format(「%b」,1)都會返回「true」 – 2015-11-09 09:01:56

0

因爲值是double型的,這是%b轉換器如何與這種類型的值工作。

10

API documentation似乎清楚地說明了原因。

如果參數arg爲null,則結果爲「false」。如果arg是布爾值或布爾值,那麼結果是由String.valueOf()返回的字符串 。否則,結果是「真」。