preincremento / postincremento en java

¿Puede alguien ayudarme a entender por qué?

int i=1;
int j=1;
int k=1;
int l=1;

System.out.println(i++ + i++);  
System.out.println(++j + ++j);  
System.out.println(k++ + ++k);  
System.out.println(++l + l++);

dar:

3
5
4
4