I know this question apparently has many duplicates like here and here.
My question is different though.
Consider the following example:
public class MyClass {
public static void test(int a, int b) {
System.out.println("In test() at start: "+a+" "+b);
int temp=a;
a=b;
b=temp;
System.out.println("In test() at end: "+a+" "+b);
}
public static void main(String args[]) {
int a=1, b=2;
System.out.println("a: "+a+" b: "+b);
test(a, b);
System.out.println("a: "+a+" b: "+b);
}
}
The output that I get for the above snippet is:
a: 1 b: 2
In test() at start: 1 2
In test() at end: 2 1
a: 1 b: 2
This shows that the original values of a
and b
in main() have not been swapped when I called test()
, thereby implying (if I understand correctly) that it was passed by value.
Now, consider the following code snippet:
public class MyClass {
public static void test(int[] arr) {
System.out.println(arr[2]);
arr[2]=20;
System.out.println(arr[2]);
}
public static void main(String args[]) {
int[] arr={0,1,2,3,4,5};
System.out.println(arr[2]);
test(arr);
System.out.println(arr[2]);
}
}
The output that I get for this code snippet is:
2
2
20
20
This shows that the value at arr[2]
was changed in the original array in main()
, thereby denoting (if I understand correctly) that the array was passed by reference.
Could someone please point out what is going on? Why does it show different behaviors?
Thanks!