Java Academy · पाठ

instanceof ऑपरेटर

cast करने से पहले object के प्रकार जाँचने और ClassCastException से बचने के लिए instanceof का उपयोग करें।

पाठ 3, कुल 4 में से13 चरण

instanceof ऑपरेटर, CoddyKit पर Java Academy का एक निःशुल्क पाठ है। यह 4 में से 3वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह Java Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। Java Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

instanceof ऑपरेटर

instanceof ऑपरेटर रनटाइम पर जाँचता है कि कोई ऑब्जेक्ट दिए गए प्रकार का उदाहरण है या नहीं। यह true या false लौटाता है और कास्टिंग से पहले ClassCastException को रोकता है।

instanceof का मूल उपयोग

सुरक्षित कास्ट करने से पहले किसी ऑब्जेक्ट के रनटाइम प्रकार की जाँच करने के लिए instanceof का उपयोग करें।

Object obj = "Hello, Java!";

if (obj instanceof String) {
    String s = (String) obj;
    System.out.println(s.toUpperCase()); // HELLO, JAVA!
}

Object num = Integer.valueOf(42);
System.out.println(num instanceof Integer); // true
System.out.println(num instanceof String);  // false

विरासत के साथ instanceof

यदि ऑब्जेक्ट स्वयं उस वर्ग का या उसके किसी उपवर्ग का (या लागू किए गए किसी इंटरफ़ेस का) उदाहरण है, तो instanceof true लौटाता है।

class Animal {}
class Dog extends Animal {}
class Cat extends Animal {}

Animal a = new Dog();

System.out.println(a instanceof Animal); // true
System.out.println(a instanceof Dog);    // true
System.out.println(a instanceof Cat);    // false

पैटर्न मिलान वाला instanceof (Java 16+)

Java 16 ने instanceof के लिए पैटर्न मिलान प्रस्तुत किया: आप उसी अभिव्यक्ति में बाइंडिंग चर घोषित कर सकते हैं, जिससे स्पष्ट कास्ट की आवश्यकता समाप्त हो जाती है।

Object shape = "circle";

// Old way
if (shape instanceof String) {
    String s = (String) shape;
    System.out.println(s.length());
}

// New way (Java 16+) — binding variable 's' is in scope
if (shape instanceof String s) {
    System.out.println(s.length()); // 6
}

विधि में पैटर्न मिलान

पैटर्न मिलान प्रकार-आधारित प्रेषण को स्पष्ट और सुरक्षित बनाता है। बाइंडिंग चर केवल उसी कार्यक्षेत्र में उपलब्ध होता है जहाँ शर्त का सत्य होना निश्चित हो।

sealed interface Shape permits Circle, Rectangle {}
record Circle(double radius) implements Shape {}
record Rectangle(double width, double height) implements Shape {}

static double area(Shape s) {
    if (s instanceof Circle c) {
        return Math.PI * c.radius() * c.radius();
    } else if (s instanceof Rectangle r) {
        return r.width() * r.height();
    }
    throw new IllegalArgumentException("Unknown shape");
}

System.out.println(area(new Circle(5)));         // 78.53...
System.out.println(area(new Rectangle(4, 6)));   // 24.0

null के साथ instanceof

null instanceof AnyType हमेशा false लौटाता है — यह कभी अपवाद उत्पन्न नहीं करता। इसलिए कास्टिंग से पहले जाँच करने के लिए instanceof एक सुरक्षित तरीका है।

String s = null;
System.out.println(s instanceof String); // false (not NPE)

Object o = null;
if (o instanceof Number n) {
    System.out.println(n.intValue());
} else {
    System.out.println("Not a number (or null)"); // prints this
}

स्विच अभिव्यक्तियाँ और पैटर्न मिलान

Java 21 पैटर्न मिलान को स्विच अभिव्यक्तियों तक विस्तारित करता है, जिससे if-else की लंबी शृंखला के बिना प्रकार-आधारित मार्ग-निर्धारण किया जा सकता है।

static String describe(Object obj) {
    return switch (obj) {
        case Integer i -> "Integer: " + i;
        case Double d  -> "Double: " + d;
        case String s  -> "String of length " + s.length();
        case null      -> "null value";
        default        -> "Unknown: " + obj.getClass().getSimpleName();
    };
}

System.out.println(describe(42));       // Integer: 42
System.out.println(describe(3.14));     // Double: 3.14
System.out.println(describe("hello")); // String of length 5
System.out.println(describe(null));     // null value

instanceof के बिना ClassCastException

पहले जाँच किए बिना कास्टिंग करने पर रनटाइम में ClassCastException उत्पन्न होता है — यह पुराने कोड की एक सामान्य त्रुटि है, जिसे पैटर्न मिलान रोकने में सहायता करता है।

Object obj = "I am a String";

try {
    Integer i = (Integer) obj; // ClassCastException!
} catch (ClassCastException e) {
    System.out.println("Cannot cast String to Integer");
}

// Safe version
if (obj instanceof Integer i) {
    System.out.println("Is integer: " + i);
} else {
    System.out.println("Not an integer");
}

व्यावहारिक: मिश्रित सूची का प्रसंस्करण

वास्तविक उपयोग का एक उदाहरण है: पैटर्न मिलान का उपयोग करके विभिन्न प्रकार के ऑब्जेक्ट वाली सूची का प्रसंस्करण करना।

import java.util.List;

List<Object> events = List.of(
    "User login", 42, 3.14, "Payment processed", 100
);

double numericSum = 0;
for (Object e : events) {
    if (e instanceof Integer n) numericSum += n;
    else if (e instanceof Double d) numericSum += d;
    else if (e instanceof String s) System.out.println("Log: " + s);
}
System.out.printf("Numeric sum: %.2f%n", numericSum); // 145.14

सीलबंद वर्ग और पूर्ण मिलान

सीलबंद वर्ग (Java 17+) यह सीमित करते हैं कि कौन से वर्ग उनका विस्तार कर सकते हैं। पैटर्न मिलान वाले स्विच के साथ कंपाइलर यह सुनिश्चित कर सकता है कि सभी संभावित मामले शामिल हैं — डिफ़ॉल्ट केस की आवश्यकता नहीं होती।

sealed interface Notification permits EmailNotification, SmsNotification {}
record EmailNotification(String to, String body) implements Notification {}
record SmsNotification(String phone, String text) implements Notification {}

static void send(Notification n) {
    switch (n) {
        case EmailNotification e ->
            System.out.println("Email to " + e.to() + ": " + e.body());
        case SmsNotification s ->
            System.out.println("SMS to " + s.phone() + ": " + s.text());
        // no default needed — compiler knows all cases are covered
    }
}

रक्षक पैटर्न

पैटर्न मिलान में प्रकार की जाँच के साथ बूलियन शर्तें जोड़ने के लिए when (Java 21) के साथ रक्षक का समर्थन मिलता है।

static String classify(Number n) {
    return switch (n) {
        case Integer i when i < 0  -> "negative int: " + i;
        case Integer i when i == 0 -> "zero";
        case Integer i             -> "positive int: " + i;
        case Double d              -> "double: " + d;
        default                    -> "other number";
    };
}

System.out.println(classify(-5));  // negative int: -5
System.out.println(classify(0));   // zero
System.out.println(classify(7));   // positive int: 7

त्वरित जाँच

निम्नलिखित अभिव्यक्ति क्या लौटाती है?

Object obj = null;
boolean result = obj instanceof String;
System.out.println(result);

पुनरावलोकन: instanceof ऑपरेटर

मुख्य बातें:

  • instanceof रनटाइम प्रकार की जाँच करता है और ClassCastException को रोकता है
  • null के लिए false लौटाता है — कभी NPE उत्पन्न नहीं करता
  • स्वयं वर्ग और उसके सभी उपवर्गों या इंटरफ़ेस के लिए true लौटाता है
  • Java 16+ का पैटर्न मिलान: if (x instanceof String s) जाँच और कास्ट को एक साथ करता है
  • Java 21 का पैटर्न वाला स्विच वैकल्पिक रक्षकों के साथ प्रकार के आधार पर साफ़-सुथरा मार्ग-निर्धारण करता है
  • सीलबंद वर्ग और पूर्ण स्विच डिफ़ॉल्ट केस की आवश्यकता समाप्त कर देते हैं
शुरुआत निःशुल्क

एआई शिक्षक के साथ Java सीखें — निःशुल्क

अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।

पाठ्यक्रम
104
पाठ
374

अक्सर पूछे जाने वाले प्रश्न

क्या “instanceof ऑपरेटर” पाठ निःशुल्क है?

हाँ—“instanceof ऑपरेटर” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और Java Academy पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। Java Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

“instanceof ऑपरेटर” में मैं क्या सीखूँगा?

cast करने से पहले object के प्रकार जाँचने और ClassCastException से बचने के लिए instanceof का उपयोग करें। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ Java Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।

क्या Java Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर Java Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 3वाँ पाठ है।

“instanceof ऑपरेटर” पाठ पूरा करने में कितना समय लगता है?

CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।

क्या मैं इस Java Academy पाठ में कोड लिख और चला सकता हूँ?

हाँ। हर Java Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।

इस पाठ्यक्रम के सभी पाठ

  1. Primitive और Reference प्रकार
  2. Widening और Narrowing रूपांतरण
  3. instanceof ऑपरेटर
  4. व्यावहारिक Type Casting
← Java Academy पर वापस जाएँ