Que o valueOf() retorna um Objeto e que o parse() um primitivo?
De acordo com a documentação:
http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Integer.html#valueOf(java.lang.String) wrote: ...
In other words, this method returns an Integer object equal to the value of:
new Integer(Integer.parseInt(s))
...
Até!