Instanceof en Java: descubre cómo funciona el operador

El operador Java instanceof se puede usar para verificar la coincidencia de un objeto y una clase y, de esta forma, evitar los mensajes de error. El operador proporciona esta información en forma de sentencia booleana, es decir, “verdadero” o “falso”. Se puede utilizar la comprobación para evitar mensajes de error.

¿Qué es instanceof en Java?

No todas las variables en Java son lo suficientemente específicas como para que se pueda discernir su naturaleza de inmediato. Sobre todo, cuando se utiliza el lenguaje de programación para crear proyectos extensos con un gran número de variables, los datos de entrada, por ejemplo, pueden hacer que una variable al final se muestre como uno de varios objetos. Por esta razón, Java pone a disposición el operador instanceof, el cual permite mostrar si la instancia de una variable de referencia corresponde realmente a una clase, subclase o interfaz. Si es así, el operador devuelve el valor booleano “true”. Si no coincide, la salida es “false” (falso).

Es fundamental, sobre todo antes de convertir un objeto desconocido, realizar una verificación con instanceof de Java. De este modo, se garantiza que el objeto pertenece a la clase asumida. Si se omite esta verificación, puede producirse un ClassCastException, un error que resulta de convertir un objeto en una clase diferente. El mensaje de error puede generar confusión y complicaciones, especialmente en código más largo, por lo que es aconsejable realizar una verificación preventiva.

Funcionalidad y sintaxis

Al ejecutar el operador instanceof en Java, se compara una variable de referencia con una clase específica también indicada. El operador se limita a determinar si hay coincidencia o no, sin incluir más información sobre la naturaleza del objeto o de la clase. La sintaxis es muy sencilla. Muestra el siguiente aspecto:

(objeto) instanceof (clase)
java

Si (objeto) es una instancia de (clase), se muestra “true”. Si no lo es, se muestra “false”.

Ejemplo simple de un operador instanceof en Java

La forma más sencilla de mostrar el funcionamiento de instanceof en Java es con un breve ejemplo. Para ello, primero se crea una clase llamada “Animal”.

public class Animal {
}
java

En el siguiente paso, se amplía esta clase con una subclase llamada “Gato”.

public class Gato extends Animal {
}
java

Ahora puedes utilizar instanceof de Java para comprobar si una instancia de “Gato” pertenece a la clase “Animal”. Para ello, se utilizan las siguientes líneas, que se imprimen con el comando de Java System.out.println:

public class Animal {}
public class Gato extends Animal {
public static void main(String args []{
Gato Gato = new Gato();
System.out.println(Gato instanceof Animal);
}
}
java

En la consola, se debería leer lo siguiente:

true
java

Múltiples niveles y la clase objeto

Este principio también funciona con la clase Main y otras subclases. Se muestra en un ejemplo con varios niveles, en el que el operador instanceof de Java se amplía con if-else. El texto tras las dos barras son comentarios Java que sirven únicamente para aclarar cada paso del proceso, pero que no tienen impacto en el resultado final del código.

// Clase 1
// Superclase
public class Animal {
}
// clase 2
// subclase
class Gato extends Animal {
}
// clase 3
// Clase Main
class Main {
public static void main(String[] args)
Gato Gato1 = new Gato();
if (Gato1 instanceof Gato)
	System.out.println ("Gato1 es una instancia de Gato");
else
	System.out.println ("Gato1 NO es una instancia de Gato");
if (Gato1 instanceof Animal)
	System.out.println ("Gato1 es una instancia de Animal");
else
	System.out.println ("Gato1 NO es una instancia de Animal");
if (Gato1 instanceof Object)
	System.out.println ("Gato1 es una instancia de Object");
else
	System.out.println ("Gato1 NO es una instancia de Object");
	}
}
java

En el ejemplo, se quiere saber si “Gato1” es una instancia de la clase “Gato” y de la superclase “Animal”. En las dos consultas se obtiene “true”. Como Object o la clase “java.lang.Object” está en la parte superior de la jerarquía, “Gatot1” también es una instancia de Object. Por tanto, el operador instanceof de Java siempre mostrará “true” si se utiliza con la clase Object. El resultado final del código se muestra:

Gato1 es una instancia de Gato
Gato1 es una instancia de Animal
Gato1 es una instancia de Object
java

Salida para un valor nulo

Si una variable tiene el valor 0, es decir, no contiene ningún objeto, el operador instanceof de Java muestra “false” automáticamente. En el siguiente ejemplo, lo puedes comprobar:

class Gato {
}
class Main {
public static void main(String[] args)
{
Gato Gato2 = null;
if (Gato2 instanceof Gato)
	System.out.println ("Gato2 es una instancia de Gato");
else
	System.out.println ("Gato2 NO es una instancia de Gato");
	}
}
java

El resultado final del código se muestra:

Gato2 NO es una instancia de Gato
java

Las superclases no son una instancia de una clase inferior

Mientras que en la jerarquía los objetos de las subclases también pertenecen a las clases superiores, este principio no funciona a la inversa. Se puede ver en el siguiente ejemplo:

class Animal {
}
class Gato extends Animal {
}
class Main {
public static void main(String[] args)
{
Animal Bello = new Animal ();
if (Bello instanceof gato)
	System.out.println ("Bello es una instancia de Gato");
else
	System.out.println ("Bello NO es una instancia de Gato");
	}
}
java

La salida en este caso es

Bello NO es una instancia de Gato
java

Mensaje de error por falta de relación

Si no hay relación entre el objeto y la clase, se muestra un mensaje de error. Para mostrarlo, se crea a continuación una clase llamada “Perro”, que pertenece a la superclase “Animal”, pero no tiene relación con “Gato”.

class Perro implements Animal {
}
class Main {
public static void main(String[] args)
{
Gato Gato3 = new Gato ();
System.out.println (Gato3 instanceof Perro);
	}
}
java

En este caso, recibimos un mensaje de error que indica que no hay conexión entre las clases “Gato”“ y “Perro”. Este mensaje tiene el siguiente aspecto:

java.lang.Error: Unresolved compilation problem:
Incompatible conditional operand types Gato and Perro
java
Consejo

En la Digital Guide encontrarás otros tutoriales y artículos sobre Java. Por ejemplo, se incluye un artículo sobre Java y JavaScript o sobre Java y Python. Si quieres saber más sobre operadores Bitwise de Java, tenemos la guía perfecta para ti.

¿Le ha resultado útil este artículo?
Utilizamos cookies propias y de terceros para mejorar nuestros servicios y mostrarle publicidad relacionada con sus preferencias mediante el análisis de sus hábitos de navegación. Si continua navegando, consideramos que acepta su uso. Puede obtener más información, o bien conocer cómo cambiar la configuración de su navegador en nuestra. Política de Cookies.
Page top