What is instanceof keyword in Java?

The "instanceof" keyword in Java serves as a binary operator that allows for the examination of an object's relationship with a given type. It functions by determining whether an object (instance) is a subtype of the specified type, providing a boolean result of either true or false. Specifically, when the left side of the expression is an instance of the class mentioned on the right side, the "instanceof" operator yields a value of true. However, if the object does not belong to the specified class or its super class, a compilation error occurs.

Notably, when the "instanceof" operator is applied to a variable with a null value, it will invariably return false. This operator proves advantageous as it facilitates the acquisition of run-time type information about an object within a program. It is commonly referred to as a type comparison operator due to its ability to compare instances with their respective types.

( Object reference variable ) instanceof (class/interface type)
interface Vehicle {} class Car {} class Ford extends Car implements Vehicle {} class Suzuki extends Car implements Vehicle {} public class TestClass { public static void main(String[] args) { Object ford = new Ford(); if ( ford instanceof Vehicle ) { System.out.println("True: Ford implements Vehicle"); } if ( ford instanceof Car ) { System.out.println("True: Ford extends Car"); } if ( ford instanceof Ford ) { System.out.println("True: Ford is Ford"); } if ( ford instanceof Object ) { System.out.println("True: Object is the parent type of all objects"); } } }

However, with Object car = new Car();,

if ( car instanceof Ford ) //fasle

In the above case, it returns fale because Car is a supertype of Ford and possibly less "refined".

Also, if try ford instanceof Suzuki even does not even compile! This is because Ford is neither a subtype nor a supertype of Suzuki, and it also does not implement it.

It is crucial to highlight that the variable used in the aforementioned example, "ford," is declared as type Object. This deliberate choice is made to emphasize that the "instanceof" operator is evaluated at runtime. This leads us to the primary use case of "instanceof," which is to enable conditional actions based on the specific type of an object during program execution. By employing "instanceof," developers can dynamically respond and execute different code paths depending on the runtime type of an object. This runtime flexibility allows for adaptable and specialized behavior based on the varying types encountered during program execution.

In addition to the aforementioned use case, the "instanceof" keyword proves to be a valuable tool in scenarios where there is a collection of objects with uncertain types. For instance, consider a situation where there is a collection of controls on a form. If the objective is to retrieve the checked state of checkboxes within the collection, a straightforward approach would not suffice since regular objects do not possess a "checked" state.

In this scenario, the "instanceof" operator becomes instrumental. By iterating through each object in the collection, one can employ "instanceof" to determine if the object is a checkbox. If it is, the object can be safely cast to a checkbox type, granting access to its specific properties such as the "checked" state. This enables the retrieval of the desired information from the checkboxes while avoiding potential errors or inconsistencies that may arise from treating non-checkbox objects as checkboxes.

if (obj instanceof Checkbox) { Checkbox cb = (Checkbox)obj; boolean state = cb.getState(); }

instanceof keyword and null value

If we apply instanceof operator with a variable that have null value, it returns false. Let's see the example given below where we apply instanceof operator with the variable that have null value.

public class TestClass { public static void main(String[] args) { TestClass tc=null; System.out.println(tc instanceof TestClass);//return false } } //Output: false


It is important to consider this behavior when applying the "instanceof" operator to variables that may potentially have null values, to avoid unexpected results or errors in the program logic.