вторник, 8 апреля 2008 г.

Java Puzzle 81: Charred Beyond Recognition

Следующая программа делает обычные вещи необычным способом. А вы догадаетесь, что она напечатает?
public class Greeter {
public static void main(String[] args) {
String greeting = "Hello world";
for (int i = 0; i < greeting.length(); i++) {
System.out.write(greeting.charAt(i));
}
}
}

А вот ничего и не напечатает! Всё дело в том, что System.out - это буферизованный поток вывода. Многие думают, что этот поток автоматически очищает буфер и выводит данные на консоль. Несмотря на комментарии в классе PrintStream об автоматическом очищении буфера, на практике можно обнаружить, что в этом классе есть единственный метод, который не очищает буфер. Это метод write(int).
Авторы рекомендуют всегда использовать привычные шаблоны где только возможно.