empty - ¿Puede un int ser nulo en Java?
int isempty (11)
¿Puede un int
ser null
en Java?
Por ejemplo:
int data = check(Node root);
if ( data == null ) {
// do something
} else {
// do something
}
Mi objetivo es escribir una función que devuelva un int
. Dicho int
se almacena en la altura de un nodo, y si el nodo no está presente, será nulo, y tendré que verificarlo.
Estoy haciendo esto para la tarea, pero esta parte específica no es parte de la tarea, simplemente me ayuda a superar lo que estoy haciendo.
Gracias por los comentarios, pero parece que muy pocas personas realmente han leído lo que está debajo del código, me preguntaba de qué otra manera puedo lograr este objetivo; fue fácil darse cuenta de que no funciona.
Como @Glen mencionó en un comentario, básicamente tienes dos formas de evitar esto:
- use un valor "fuera de límite". Por ejemplo, si los "datos" nunca pueden ser negativos en el uso normal, devuelve un valor negativo para indicar que no es válido.
- Use un Entero. Solo asegúrese de que el método de "verificación" devuelve un Entero, y se lo asigna a un Entero no a un int. Porque si un "int" se involucra en el camino, el boxeo y el unboxing automáticos pueden causar problemas.
Como usted solicita otra forma de lograr su objetivo, le sugiero que use una clase contenedora:
new Integer(null).
Compruebe nulo en su método check () y devuelva un valor no válido como -1 o cero si es nulo. Entonces el cheque sería por ese valor en lugar de pasar el nulo. Esto sería algo normal de hacer en la ''C'' anterior.
El código ni siquiera se compilará. Solo un Object
completo puede ser null
, como Integer
. Aquí hay un ejemplo básico para mostrar cuándo puedes probar null:
Integer data = check(Node root);
if ( data == null ) {
// do something
} else {
// do something
}
Por otro lado, si se declara que check()
devuelve int
, nunca puede ser null
y todo el bloque if-else
es superfluo.
int data = check(Node root);
// do something
Los problemas de Autoboxing no se aplican aquí también cuando check()
se declara para devolver int
. Si hubiera devuelto Integer
, puede arriesgar NullPointerException
al asignarlo a un int
lugar de a un Integer
. Asignarlo como un Integer
y usar el bloque if-else
habría sido obligatorio.
Para obtener más información sobre el autoboxing, consulte esta guía de Sun.
El objeto entero sería lo mejor. Si debe usar primitivos, puede usar un valor que no existe en su caso de uso. La altura negativa no existe para las personas, por lo
public int getHeight(String name){
if(map.containsKey(name)){
return map.get(name);
}else{
return -1;
}
}
En Java, int es un tipo primitivo y no se considera un objeto. Solo los objetos pueden tener un valor nulo. Entonces la respuesta a su pregunta es no, no puede ser nulo. Pero no es tan simple, porque hay objetos que representan los tipos más primitivos.
El entero de clase representa un valor int, pero puede contener un valor nulo. Dependiendo de su método de check
, podría estar devolviendo un int o un entero.
Este comportamiento es diferente de algunos lenguajes más orientados a objetos como Ruby, donde incluso objetos "primitivos" como los objetos se consideran objetos.
Junto con todas las respuestas anteriores, me gustaría agregar este punto también.
Para los tipos primitivos, tenemos el tamaño de la memoria fija, es decir, para int tenemos 4 bytes y char tenemos 2 bytes. Y null se usa solo para objetos porque el tamaño de la memoria no es fijo.
Entonces, por defecto, tenemos
int a=0;
y no
int a=null;
Lo mismo ocurre con otros tipos primitivos y, por lo tanto, nulo solo se usa para objetos y no para tipos primitivos.
No soy un experto, pero sí creo que el equivalente null
para un int es 0
.
Por ejemplo, si int[]
un int[]
, cada ranura contiene 0
en oposición a null
, a menos que lo configure para otra cosa.
En algunas situaciones, esto puede ser útil.
No. Solo las referencias a objetos pueden ser nulas, no primitivas.
Una excelente forma de averiguarlo:
public static void main(String args[]) {
int i = null;
}
Intenta compilar.
int
no puede ser nulo, pero Integer
puede . Debe tener cuidado al desempaquetar enteros nulos, ya que esto puede causar mucha confusión y arañazos en la cabeza.
por ejemplo esto:
int a = object.getA(); // getA returns a null Integer
le dará una NullPointerException
, a pesar de que el objeto no sea nulo.
Para dar seguimiento a su pregunta, si desea indicar la ausencia de un valor, investigaría java.util.Optional<Integer>