странное поведение printf () в Java - PullRequest
1 голос
/ 28 марта 2011

У меня есть следующий фрагмент кода

System.out.printf("%b\n", 123);

который печатает "true".

Может кто-нибудь объяснить это поведение? не должно ли это вызвать исключение IllegalFormatException?

Ответы [ 2 ]

3 голосов
/ 28 марта 2011

Ну, так как в спецификации сказано:

"Если аргумент arg равен нулю, то результатом является" false ". Если arg является логическим или логическим значением, то результатом является строка, возвращаемая функцией String.valueOf (). В противном случае результатом будет" true ". "( src )

Поведение вполне ожидаемое, не так ли? Почему они решили реализовать это таким образом - не знаю, я бы согласился, что это не интуитивно понятно (но хорошо, что это следует за C, который также печатает что угодно, если вы даете ему неправильные аргументы;))

2 голосов
/ 28 марта 2011

Из JavaDocs:

Если аргумент arg равен нулю, то результатом является «ложь».Если arg - логическое значение или логическое значение, то результатом является строка, возвращаемая функцией String.valueOf ().В противном случае результатом будет «true».

Аргумент, который вы даете, не является null, boolean или Boolean, поэтому он попадает в поле «В противном случае» и поэтомуtrue

...