Ciao, ho due esercizi semplici su cui ho qualche dubbio.

1) Ho un programma del genere e devo dire cosa mi stampa il main.
codice:
class A {
   int x;
}
class PP {
   static void metUno(int a) {
      a = 0;
   }
   static void metDue(int[] a) {
      a[0] = 0;
   }
   static void metTre(int[] a) {
      a = null;
   }
   static void metQuattro(A a) {
      a = null;
   }
   static void metCinque(A a) {
      a.x = 0;
   }
   public static void main(String[] args) {
       int i1 = 5;
       metUno(i1);
       System.out.println(i1);
       int[] a1 = new int[] {5, 5};
       metDue(a1);
       System.out.println(a1[0]);   
       int[] a2 = new int[] {5, 5};   
       metTre(a2); 
       System.out.println(a2[0]);
       A o1 = new A();
       o1.x = 5;
       metQuattro(o1); 
       System.out.println(o1.x);
       A o2 = new A();
       o2.x = 5;
       metCinque(o2); 
       System.out.println(o2.x);
   }
}
La soluzione mi dice che viene stampato: 5 0 5 5 0. Qualcuno mi spiega il perchè?
Io avrei detto che viene stampato: 0 0 null null 0. Inoltre non ho capito cosa fa metCinque e o2.x = 5 cosa vuol dire?

2) Dato questo programma

Devo dire cosa stampa il main in questi casi:
  • a. X è 0, Y è A
    b. X è 0, Y è B
    c. X è 1, Y è A
    d. X è 1, Y è B

Qui non ho proprio capito l'esercizio, cosa sono X, Y, A e B?


Grazie in anticipo!