Come verificare se un int è nullo


110

Ho un oggetto chiamato Person.

ha diversi attributi in esso;

int id;
String name;

ho impostato un oggetto persona come Person p = new Person(1,"Joe");.

1.) Devo controllare se l'oggetto non è nullo; La seguente espressione è corretta?

if (person == null){
}

Or


if(person.equals(null))

2.) Ho bisogno di sapere se l'ID contiene un Int.

if(person.getId()==null){} 

Ma java non lo consente. Come posso fare questo controllo?


10
Non solo Java. Un tipo primitivo non può essere nullo da nessuna parte.
Rohit Jain

2
sì, il valore predefinito di un intè 0?
Sharon Hwk

1
@sharon. Sì, è 0. Quindi, puoi fare il controllo con 0. Se vuoi fare il controllo null. Usa Integer wrapper per quello.
Rohit Jain

3
Non è sempre una buona idea usare un int per rappresentare un codice di identificazione poiché non lo si utilizza come un numero vero: non si eseguono addizioni, sottrazioni o altre operazioni matematiche con esso. Considera invece l'utilizzo di una stringa.
Hovercraft Full Of Eels

Risposte:


184

An intnon è nullo, potrebbe essere 0se non inizializzato.

Se vuoi che un intero possa essere nullo, devi usare al Integerposto di int.

Integer id;
String name;

public Integer getId() { return id; }

Inoltre l'affermazione if(person.equals(null))non può essere vera, perché se personè nulla, allora aNullPointerException verrà lanciato a. Quindi l'espressione corretta èif (person == null)


@sharonHwk "person == null" dovrebbe essere l'opzione migliore. Se persona è null, non avrà un metodo "uguale", quindi verrà generato "person.equals (null)".
CodingFanSteve

"Un int non è nullo, potrebbe essere 0 se non inizializzato." non è corretto al 100%, un int come variabile locale non verrà inizializzato.
Emerica

Ovviamente, poiché la variabile locale non può essere non inizializzata, è un codice non valido, Java non lo consentirà, come dichiarato nella sua specifica.
Alex

48

le primitive non hanno valore nullo. il valore predefinito per un int è 0.

if(person.getId()==0){}

Valori predefiniti per le primitive in java:

Data Type   Default Value (for fields)

byte                0
short               0
int                 0
long            0L
float           0.0f
double          0.0d
char            '\u0000'
boolean         false

Gli oggetti hanno null come valore predefinito.

String (o qualsiasi oggetto) ---> null

1.) Devo controllare se l'oggetto non è nullo; La seguente espressione è corretta?

if (person == null){
}

la parte di codice sopra controlla se la persona è nulla. devi fare

if (person != null){ // checks if person is not null
}

e

if(person.equals(null))

Il codice precedente genererebbe NullPointerException quando person è null.


Grazie, è molto utile.
Sharon Hwk

14

Una primitiva intnon può essere nulla. Se hai bisogno di null, usa Integerinvece.


3

1.) Devo controllare se l'oggetto non è nullo; La seguente espressione è corretta?

if (person == null) {}

. Questo è il modo in cui controlli se l'oggetto è null.

2.) Ho bisogno di sapere se l'ID contiene un Int.

if (person.getId () == null) {}

NO Poiché idè definito come primitivo int, verrà inizializzato di default con 0e non lo sarà mai null. Non è necessario controllare i tipi primitivi, se sono nulli. Non saranno mai nulli. Se lo desideri, puoi confrontare con il valore predefinito 0come if(person.getId()==0){}.


0

Devi accedere agli attributi della tua classe.

Per accedervi gli attributi, devi fare:

person.id
person.name

dove

persona

è un'istanza della tua classe Person.

Questo può essere fatto se è possibile accedere agli attributi, in caso contrario, è necessario utilizzare setter e getter ...


@RohitJain non sto dicendo questo, sto dicendo che non è corretto chiedere person == nul se vuole sapere se l'id è "null". Dato che id è un int, non può chiedere nel modo in cui suggerisci ...
melli-182

0

Puoi usare

if (person == null || String.valueOf(person.getId() == null)) 

oltre all'approccio regolare

person.getId() == 0

0

In Java non ci sono valori Null per i tipi di dati primitivi. Se è necessario selezionare Null, utilizzare Integer Class invece del tipo primitivo. Non devi preoccuparti della differenza del tipo di dati. Java converte i dati di tipo primitivo int in Integer. Riguardo alla memoria Integer richiede più memoria di int. Ma la differenza di allocazione della memoria, nulla da considerare.

In questo caso devi usare Inter invece di int

Prova sotto lo snippet e vedi l'esempio per maggiori informazioni,

Integer id;
String name;

//Refer this example
    Integer val = 0;

`

if (val != null){
System.out.println("value is not null");
}

`

Inoltre puoi assegnare Null come di seguito,

val = null;
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.