Stavo solo studiando sulla mia Java in preparazione per un esame e mi sono imbattuto in una sorta di problema con valori int/Integer non inizializzati.Uninitialized int vs Integer
class A
{
int x;
Integer y;
static int z;
static Integer z2;
public A(){}
}
Diciamo che inizializzo un oggetto di Classe A. A a = nuovo A();
Ho provato questo in un compilatore e ottenuto i risultati
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
Inoltre, ho provato alcuni più non inizializzate confronti int/interger in un riquadro interazioni per vedere se sarei ottenere risultati diversi se il mio x, Non erano variabili di istanza di classe come sopra.
int x;
Integer y;
x == 0; true
x == null; Static Error: Bad type in comparison expression
y == 0; java.lang.NullPointerException
y == null; true
Tuttavia, le mie affermazioni professore in una conferenza che i valori devono essere le seguenti:
x == 0; Uninitialized
x == null; Undefined
y == 0; java.lang.NullPointerException
y == null; Uninitialized
Ora io non voglio mettere in dubbio quello che scrive l'esame, ma che x == 0 e y == il valore di verità nullo è corretto? Una spiegazione sul perché sarebbe molto apprezzata, grazie.
Se vi state chiedendo chi è più credibile nel sapere che cosa farà il compilatore: il compilatore o il vostro professore ... la risposta è il compilatore. –