para lazo sin tirantes en java

Me pregunto por qué estos dos códigos siguientes dan resultados diferentes;

for(i = 1, j = 0; i < 10; i++) {
    j += i;
    System.out.println(i);
}

Este da los números entre 1 incluido y 10 excluidos.

for(i = 1, j = 0; i < 10; i++)
    j += i;
System.out.println(i);

Sin embargo, este da 10. No pude entender la lógica de esto;

for()
do_something;
do_something_else;

Respuestas a la pregunta(5)

Su respuesta a la pregunta