Int no inicializado vs entero

Estaba estudiando mi Java en preparación para un examen y me encontré con una especie de problema con valores int / enteros no inicializados.

class A
    {
       int x;
       Integer y;
       static int z;
       static Integer z2;
       public A(){}   
    }

Digamos que inicializo un objeto de la Clase A. A a = new A ();

He intentado esto en un compilador y obtuve los resultados.

a.x == 0; true
a.x == null; Static Error: Bad type in comparison expression
a.y == 0; java.lang.NullPointerException
a.y == null; true
a.z == 0; true 
a.z == null; Static Error: Bad type in comparison expression
a.z2 == 0; NullPointerException
a.z2 == null; true

Además, probé algunas comparaciones int / Interger sin inicializar en un panel de interacciones para ver si obtendría resultados diferentes si mi x, y no fueran variables de instancia de clase, como están arriba.

int x;
Integer y;
x == 0; true
x == null; Static Error: Bad type in comparison expression
y == 0; java.lang.NullPointerException
y == null; true

Sin embargo, mi profesor afirma en una conferencia que los valores deberían ser los siguientes:

x == 0; Uninitialized
x == null; Undefined
y == 0; java.lang.NullPointerException
y == null; Uninitialized

Ahora no quiero dudar de quien escribe el examen, pero ¿cuál x == 0 e y == el valor de verdad nulo es correcto? Una explicación de por qué sería muy apreciada, gracias.

Respuestas a la pregunta(9)

Su respuesta a la pregunta