A malícia da questão está no fato de que dentro de um bloco for a saída seria exatamente a exibida na questão.
Por exemplo, vejam o seguinte trecho de código:
for(int i = 1; i < 6; i++) {
System.out.println("num é = " + i); }
A saída é:
num é = 1
num é = 2
num é = 3
num é = 4
num é = 5
A diferença é que o operador de incremento posterior num++ dentro de um bloco while será computado logo após o teste ser realizado e as instruções do bloco já conterão o valor incrementado. Já o mesmo operador, dentro de um bloco for, devido à natureza do próprio comando será avaliado somente APÓS as instruções dentro do bloco for serem executadas. Isso é tão verdade que se mesmo utilizando um operador pré incremento, o resultado seria o mesmo. Vejam o exemplo:
for(int i = 1 (1° PASSO ÚNICO) ; i < 6 (2° PASSO); ++i (4° PASSO)) {
System.out.println("for ==> num é = " + i); (3° PASSO) }
A saída é:
num é = 1
num é = 2
num é = 3
num é = 4
num é = 5
Ou seja, o mesmo resultado. Reparem na ordem de execução do bloco for mostrada acima. Por este motivo, utilizar um operador de pré ou pós incremento tanto faz dentro de um bloco for com esta estrutura demonstrada. Os passos 2, 3 e 4 se repetem, na mesma ordem, de acordo com a quantidade de condições a serem avaliadas. Por último, se quisséssemos o mesmo resultado dentro de um bloco while, utilizar um operador de pré incremento nos levaria à mesma saída exibida na questão, tendo apenas que alterar o valor de entrada da variável num para zero. Vejam:
int num = 0;
while (++num < 6)
{ System.out.println("while ==> num é = " + num); }
A saída é:
num é = 1
num é = 2
num é = 3
num é = 4
num é = 5
Isso acontece porque no while o incremento será realizado antes da avaliação da condição, depois a condição será avaliada e por ultimo as instruções dentro do próprio bloco.