Of course reference itself is passed. But if you change content of reference then same will be reflected in calling program. for e.g. i have changed your code ,
===============================
public class
Test {
int i[] = {0};
public static void main(String args[]) {
int i[] = {1};
change_i(i);
System.out.println(i[0]);
}
public static void change_i(int i[]) {
int j[] = {2};
i[0]+=3;
i = j;
}
}
======================================
This will print 4.
if you make change to reference itself will not be reflected because you are not returning the refrence back. If you are not returning the refrence then in calling program refrence is not reflected.
Regards
R V Holla.