Como verificar se um int é nulo

110

Eu tenho um objeto chamado Person.

possui vários atributos;

int id;
String name;

eu defini um objeto de pessoa como Person p = new Person(1,"Joe");.

1.) Preciso verificar se o objeto não é nulo; A seguinte expressão está correta;

if (person == null){
}

Or


if(person.equals(null))

2.) Preciso saber se o ID contém um Int.

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

Mas, o java não permite. Como posso fazer essa verificação?

Sharon Hwk
fonte
10
Não apenas Java. Um tipo primitivo não pode ser nulo em qualquer lugar.
Rohit Jain
2
sim, o valor padrão de um inté 0?
sharon Hwk
1
@sharon. Sim, é 0. Portanto, você pode fazer a verificação com 0. Se você quiser fazer a verificação de nulos. Use wrapper inteiro para isso.
Rohit Jain
3
Nem sempre é uma boa ideia usar um int para representar um código de identificação, pois você não o está usando como um número verdadeiro - você não faz adição, subtração ou outras operações matemáticas com ele. Considere usar uma String em vez disso.
Hovercraft Full Of Eels

Respostas:

184

Um intnão é nulo, pode ser 0se não for inicializado.

Se você quiser que um inteiro seja nulo, você precisa usar em Integervez de int.

Integer id;
String name;

public Integer getId() { return id; }

Além disso, a afirmação if(person.equals(null))não pode ser verdadeira, porque se personfor nula, um NullPointerExceptionserá lançado. Portanto, a expressão correta éif (person == null)

Alex
fonte
@sharonHwk "person == null" deve ser a melhor opção. Se pessoa for nula, não terá um método "igual", então "person.equals (nulo)" será acionado.
CodingFanSteve
"Um int não é nulo, pode ser 0 se não for inicializado." isso não está 100% correto, um int como variável local não será inicializado.
Emerica de
Claro, pois a variável local não pode ser desinicializada, é um código inválido, o Java não permite, conforme declarado em sua especificação.
Alex,
48

primitivos não têm valor nulo. o padrão tem para um int é 0.

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

Valores padrão para primitivos em 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

Os objetos têm nulo como valor padrão.

String (ou qualquer objeto) ---> null

1.) Preciso verificar se o objeto não é nulo; A seguinte expressão está correta;

if (person == null){
}

o trecho de código acima verifica se pessoa é nula. você precisa fazer

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

e

if(person.equals(null))

O código acima lançaria NullPointerException quando pessoa é nula.

PermGenError
fonte
Obrigado, isso é muito útil.
sharon Hwk
14

Um primitivo intnão pode ser nulo. Se você precisar de null, use Integer.

Zutty
fonte
3

1.) Preciso verificar se o objeto não é nulo; A seguinte expressão está correta;

if (person == null) {}

SIM . É assim que você verifica se o objeto é null.

2.) Preciso saber se o ID contém um Int.

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

NÃO Como idé definido como primitivo int, será inicializado por padrão com 0e nunca será null. Não há necessidade de verificar os tipos primitivos, se eles forem nulos. Eles nunca serão nulos. Se desejar, você pode comparar com o valor padrão 0como if(person.getId()==0){}.

Yogendra Singh
fonte
0

Você tem que acessar seus atributos de classe.

Para acessar seus atributos, você deve fazer:

person.id
person.name

Onde

pessoa

é uma instância de sua classe Person.

Isso pode ser feito se os atributos puderem ser acessados, caso contrário, você deve usar setters e getters ...

melli-182
fonte
@RohitJain não estou dizendo isso, estou dizendo que não é correto perguntar por pessoa == nul se ela quer saber se o id é "nulo". Devido ao fato de que id é um int, ele não pode perguntar da maneira que você está sugerindo ...
melli-182
0

Você pode usar

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

além da abordagem regular

person.getId() == 0
codificador do mal
fonte
0

Em Java, não há valores nulos para tipos de dados primitivos. Se você precisar marcar Null, use Integer Class em vez do tipo primitivo. Você não precisa se preocupar com a diferença de tipo de dados. Java converte dados de tipo primitivo int em Inteiro. Quando se trata de memória, o inteiro ocupa mais memória do que o interno. Mas a diferença de alocação de memória, nada a ser considerado.

Neste caso, você deve usar Inter em vez de int

Experimente o snippet abaixo e veja o exemplo para obter mais informações,

Integer id;
String name;

//Refer this example
    Integer val = 0;

`

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

`

Além disso, você pode atribuir nulo conforme abaixo,

val = null;
Chameera W. Ashan
fonte