Это пример из лекции и у меня 1 вопрос по нему. Почему при вызове метода printSomething(); он не печатает нам текст сразу , а ждет пока мы что-то сделаем с ним Будь то замена знаков или преобразование в заглавные буквы
testString.printSomething();  // по идее должно вывести текст который задан в методе "it's a text for testing"
String result = outputStream.toString();
String result2 = result.toUpperCase(); //
System.setOut(printStream);
System.out.println(result2); // а тут вывести его еще раз , но уже преобразованный
Но почему он выводит только один раз строку ?
public static void main(String[] args) throws Exception
{
 //запоминаем настоящий PrintStream в специальную переменную
 PrintStream consoleStream = System.out;

 //Создаем динамический массив
 ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
 //создаем адаптер к классу PrintStream
 PrintStream stream = new PrintStream(outputStream);
 //Устанавливаем его как текущий System.out
 System.setOut(stream);

 //Вызываем функцию, которая ничего не знает о наших манипуляциях
 printSomething();

 //Преобразовываем записанные в наш ByteArray данные в строку
 String result = outputStream.toString();

 //Возвращаем все как было
 System.setOut(consoleStream);
}

public static void printSomething()
{
 System.out.println("Hi");
 System.out.println("My name is Amigo");
 System.out.println("Bye-bye!");
}