2011-12-25 3 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', они могут быть помещены в бокс (на 'Boolean'). Вот почему вы можете передавать неожиданные типы 'printf', но не' if'. –

ответ

96

для «% б»: Если аргумент аргумент имеет нулевое значение, то результат «ложь». Если arg является логическим или логическим, то результатом является строка, возвращаемая String.valueOf(). В противном случае результат будет «истинным».

reference

+4

Да, если вы разработчик C, будьте осторожны, потому что String.format («% b», 0) и String.format («% b», 1) возвратят «true», –

0

Поскольку значение имеет тип double и это как %b преобразователь работает со значениями этого типа.

10

API documentation, похоже, четко указывает, почему.

Если аргумент arg равен null, тогда результат будет «false». Если arg является логическим или Boolean, то результатом является строка, возвращаемая String.valueOf(). В противном случае результат будет «истинным».

Смежные вопросы