ESP32 Question about printf() vs. Serial.print()

Hi - I've been using printf() with ESP32 for a long time now. Very happy that it's supported because I much prefer the formatted print features vs. multiple Serial.print() statements to obtain the same result.

But I just realized something...printf() doesn't seem to actually print to the serial port until a "\n" is in the stream. Don't know why I just realized this, all seems to have worked ok in my past...

For example, this prints a line of 5 'z's individually over 5 seconds:

        Serial.print("z");
        delay(1000);
        Serial.print("z");
        delay(1000);
        Serial.print("z");
        delay(1000);
        Serial.print("z");
        delay(1000);
        Serial.print("z\n");

...but this prints 5 'x's all at once, only when the "\n" occurs:

        printf("x");
        delay(1000);
        printf("x");
        delay(1000);
        printf("x");
        delay(1000);
        printf("x");
        delay(1000);
        printf("x\n");

Can anyone explain to me why this is so, and might there be other printf() vs. Serial.print() issues I'm not yet aware of?

Thanks...

does Serial do a flush()?

Apparently printf() doesn't while Serial.print() does.

I hadn't noticed before because most of my printf() usage included \n.

I was wondering if there were any other differences I should be aware of...