- 1Java Exceptions
- 2Java Keywords
- 3Java abstract Keyword
- 4Java assert Keyword
- 5Java boolean Keyword
- 6Java break Keyword
- 7Java byte Keyword
- 8Java case Keyword
- 9Java catch Keyword
- 10Java char Keyword
- 11Java class Keyword
- 12Java const Keyword
- 13Java continue Keyword
- 14Java default Keyword
- 15Java do Keyword
- 16Java double Keyword
- 17Java else Keyword
- 18Java enum Keyword
- 19Java extends Keyword
- 20Java final Keyword
- 21Java finally Keyword
- 22Java float Keyword
- 23Java for Keyword
- 24Java goto Keyword
- 25Java if Keyword
- 26Java implements Keyword
- 27Java import Keyword
- 28Java instanceof Keyword
- 29Java int Keyword
- 30Java interface Keyword
- 31Java long Keyword
- 32Java native Keyword
- 33Java new Keyword
- 34Java null Keyword
- 35Java package Keyword
- 36Java private Keyword
- 37Java protected Keyword
- 38Java public Keyword
- 39Java return Keyword
- 40Java short Keyword
- 41Java static Keyword
- 42Java strictfp Keyword
- 43Java super Keyword
- 44Java switch Keyword
- 45Java synchronized Keyword
- 46Java this Keyword
- 47Java transient Keyword
- 48Java try Keyword
- 49Java void Keyword
- 50Java volatile Keyword
- 51Java while Keyword
- 52Java String Methods - Syntax and Description
- 53Java String
charAt()
method - 54Java String
codePointAt()
method - 55Java String
codePointBefore()
method - 56Java String
codePointCount()
method - 57Java String
compareTo()
method - 58Java String
compareToIgnoreCase()
method - 59Java String
concat()
method - 60Java String
contains()
method - 61Java String
contentEquals()
method - 62Java String
copyValueOf()
method - 63Java String
endsWith()
method - 64Java String
equals()
method - 65Java String
equalsIgnoreCase()
method - 66Java String
format()
method - 67Java String
getBytes()
method - 68Java String
getChars()
method - 69Java String
hashCode()
method - 70Java String
indexOf()
method - 71Java String
intern()
method - 72Java String
isEmpty()
method - 73Java String
join()
method - 74Java String
lastIndexOf()
method - 75Java String
length()
method - 76Java String
matches()
method - 77Java String
offsetByCodePoints()
method - 78Java String
regionMatches()
method - 79Java String
replace()
method - 80Java String
replaceAll()
method - 81Java String
replaceFirst()
method - 82Java String
split()
method - 83Java String
startsWith()
method - 84Java String
subSequence()
method - 85Java String
substring()
method - 86Java String
toCharArray()
method - 87Java String
toLowerCase()
method - 88Java String
toString()
method - 89Java String
toUpperCase()
method - 90Java String
trim()
method - 91Java String
valueOf()
method - 92Java ArrayList Methods - Complete Reference with Syntax and Description
- 93Java LinkedList Methods - Complete Reference with Syntax and Description
- 94Java HashMap Methods - Syntax and Descriptions
Java instanceof Keyword
Usage and Examples
instanceof
Keyword in Java
The instanceof
keyword in Java is used to test whether an object is an instance of a specific class or implements an interface. It's a type-checking operator that returns true
or false
.
This is particularly useful when you're dealing with inheritance or polymorphism and want to confirm an object's actual type before casting it.
Syntax
object instanceof ClassName
This will return true
if object
is an instance of ClassName
, otherwise false
.
Why Use instanceof
?
To safely cast an object, especially in inheritance hierarchies. Without checking the type, casting can throw a ClassCastException
.
Basic Example
class Animal {}
class Dog extends Animal {}
public class Test {
public static void main(String[] args) {
Animal a = new Dog();
System.out.println(a instanceof Animal); // true
System.out.println(a instanceof Dog); // true
System.out.println(a instanceof Object); // true
}
}
true
true
true
Explanation
Even though a
is declared as Animal
, the actual object is a Dog
, which is a subclass of Animal
. Hence, all three checks return true
.
instanceof
with Null Reference
If the reference is null
, instanceof
always returns false
.
Dog d = null;
System.out.println(d instanceof Dog); // false
false
Using instanceof
Before Casting
Let's avoid a ClassCastException
by checking the type before casting:
class Animal {}
class Cat extends Animal {}
class Dog extends Animal {}
public class Demo {
public static void main(String[] args) {
Animal a = new Cat();
if (a instanceof Dog) {
Dog d = (Dog) a;
} else {
System.out.println("a is not a Dog");
}
}
}
a is not a Dog
Polymorphic Behavior and instanceof
The keyword shines in polymorphic scenarios where a superclass reference points to subclass objects:
class Shape {}
class Circle extends Shape {}
class Rectangle extends Shape {}
public class ShapeTest {
public static void main(String[] args) {
Shape s1 = new Circle();
Shape s2 = new Rectangle();
System.out.println(s1 instanceof Circle); // true
System.out.println(s2 instanceof Rectangle); // true
System.out.println(s1 instanceof Rectangle); // false
}
}
true
true
false
instanceof
with Interfaces
You can also check if an object implements an interface using instanceof
:
interface Drawable {}
class Image implements Drawable {}
class Text {}
public class InterfaceTest {
public static void main(String[] args) {
Object obj = new Image();
System.out.println(obj instanceof Drawable); // true
System.out.println(obj instanceof Text); // false
}
}
true
false
Java 16 and Pattern Matching with instanceof
Java 16 introduced pattern matching with instanceof
for cleaner syntax:
Object obj = "hello";
if (obj instanceof String str) {
System.out.println(str.toUpperCase());
}
HELLO
This eliminates the need for a separate cast after checking type.
Best Practices
- Use
instanceof
only when necessary — often polymorphism can solve the problem more cleanly. - Prefer interface checks when possible for flexibility.
- Don't use
instanceof
as a replacement for poor class design. If you find yourself using it frequently, consider if your design can be improved.