Int não inicializado vs Inteiro

Eu estava apenas estudando meu Java em preparação para um exame e me deparei com um tipo de problema com valores int / Inteiro não inicializados.

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

Digamos que eu inicialize um objeto da Classe A. A a = new A ();

Eu tentei isso em um compilador e obtive os 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

Além disso, tentei algumas comparações int / Interger mais não inicializadas em um painel de interações para ver se eu obteria resultados diferentes se meu x, y não fossem variáveis de instância de classe, como estão acima.

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

No entanto, meu professor afirma em uma palestra que os valores devem ser os seguintes:

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

Agora, não quero duvidar de quem faz o exame, mas qual x == 0 ey == valor de verdade nulo está correto? Uma explicação sobre por que seria muito apreciada, obrigado.

questionAnswers(9)

yourAnswerToTheQuestion