valueOf() gibt ein Integer-Objekt zurück, während parseInt() den primitiven Datentyp int zurückgibt.
Es besteht also noch ein riesiger Unterschied zwischen den Ergebnissen der Rückgaben.
Nun Java würde das dann eben unboxing in einen int umwandeln. Daher führt das eben schon zum Ziel, ist aber langsamer. Deswegen lohnt sich eben parseInt schon mehr, wenn man einen primitiven Datentypen von vornherein haben will.