O for executa os loops enquanto a condição apresentada for TRUE.
Por isso, no primeiro caso, ele não executa nem uma vez, pois o índice começa com o valor 0 e o teste que você exige é que ( i == 9 ), o que retorna False e desencadeia no fim do fluxo do for.
E o segundo caso está correto, pois ele vai executar o loop enquanto o índice for menor que 10. O segundo caso, usando o while, ficaria da seguinte forma:
int i = 0; // declara o índice...
while (i < 10) { // Enquanto índice for menor que 10..
// implementação... esse código executará 10 vezes!
}