difference between valueOf() and parseXXX()

what is the difference between
Integer i5=Integer.parseInt("1010100",2); and int i5=Integer.parseInt("1010100",2);

also
int i4=Integer.valueOf("101011",2); and Integer i4=Integer.valueOf("101011",2);
------------------------------------------------------------------------------------------------------
if parseXxx() returns the primitive type and valueOf() returns a wrapper object reference of the type then why this is compiling without any error?