public class Test1
{
public static void main(String[] args)
{
  int x = 1;
  f(x);
  System.out.println(x);
}
static void f(int y)
{
  y++;
}
}
------
public class Test2
{
public static void main(String[] args)
{
  int[] x = new int[10];
  x[0] = 1;
  f(x);
  System.out.println(x[0]);
}
static void f(int[] y)
{
  y[0]++;
}
}
Test1 prints the value 1, but Test2 prints the value 2. Explain this in terms of Java's parameter passing mechanism and its int and array types.