¿Cómo funcionan los operadores de incremento posterior (i ++) y pre incremento (++ i) en Java?

¿Me puede explicar el resultado de este código Java?

int a=5,i;

i=++a + ++a + a++;
i=a++ + ++a + ++a;
a=++a + ++a + a++;

System.out.println(a);
System.out.println(i);

La salida es 20 en ambos casos