the value of b is not changed cause u r passing copy of a variable b.
and b is of primitive datatype , so the changes taken place to b inside the method does not affect the value of b outside the method since only copy of b is sent and not b itself.
as for c changing, in this case also copy of c is sent to the method, but since c is an array , tht nmeans its an object, so the value of c changes , java works with references and not directly with objects.
rule , when u pass an object as an argument , u can change the value, ie, reference of tht object in method body ,
when u pass primitive type, no changes r made.
u can make changes to a variable only if u pass an object .
in ur case c is an object ..
hope this helps