FaCode Ngôn ngữ Java toán tử instanceof trong Java

FaCode Ngôn ngữ Java

FaCode Ngôn ngữ Java toán tử instanceof trong java

Toán tử instanceof trong java

Toán tử instanceof trong java được sử dụng để kiểm tra một đối tượng có phải là thể hiển của một kiểu dữ liệu cụ thể không (lớp, lớp con, interface).

instanceof trong java được gọi là toán tử so sánh kiểu vì nó so sánh thể hiện với kiểu dữ liệu. Nó trả về giá trị boolean là true hoặc false. Nếu bạn dùng toán tử instanceof với bất kỳ biến nào mà có giá trị null, giá trị trả về sẽ là false.

Ví dụ về toán tử instanceof trong java

FaCode Ngôn ngữ Java

Output:

Code:

public class Simple1 {

    public static void main(String args[])

    {

     Simple1 s = new Simple1();

     System.out.println(s instanceof Simple1);// true

    }

}

Một đối tượng có kiểu của lớp con thì cũng có kiểu của lớp cha. Ví dụ, nếu Dog kế thừa Animal thì đối tượng của Dog có thể tham chiếu đến cả hai lớp Dog và Animal.

Ví dụ khác về toán tử instanceof trong java

FaCode Ngôn ngữ Java

Output:

Code:

class Animal {}

public class Dog extends Animal {// Dog inherits Animal

    public static void main(String args[])

    {

    Dog dog = new Dog();

    System.out.println(dog instanceof Animal);// true

    }

}

instanceof trong java với biến có giá trị null

Nếu bạn sử dụng toán tử instanceof với biến có kiểu bất kỳ có giá trị null thì giá trị trả về luôn là null. Ví dụ.

Output:

Code:

public class Dog2 {

    public static void main(String args[])

    {

     Dog2 d = null;

     System.out.println(d instanceof Dog2);// false

    }

}

Downcasting với toán tử instanceof trong java

Khi kiểu của lớp con tham chiếu tới đối tượng của lớp cha được gọi là downcasting. Nếu bạn thực hiện tham chiếu trực tiếp thì trình biên dịch sẽ báo lỗi biên dịch. Nếu bạn thực hiện bằng việc ép kiểu thì lỗi ngoại lệ ClassCastException được ném ra lúc runtime. Nhưng nếu bạn sử dụng toán tử instanceof thì downcasting được.

Tham chiếu trực tiếp:

 

Sử dụng ép kiểu dữ liệu:

Ví dụ downcasting với instanceof

FaCode Ngôn ngữ Java

Output:

Code:

class Animal {}

public class Dog3 extends Animal {

    static void method(Animal a)

    {

    if (a instanceof Dog3) {

    Dog3 d = (Dog3) a;// downcasting

    System.out.println("downcasting is ok");

    }

 }

 public static void main(String[] args)

    {

    Animal a = new Dog3();

    Dog3.method(a);

    }

}

Ví dụ downcasting không sử dụng instanceof

FaCode Ngôn ngữ Java

Output:

Code:

class Animal {}

public class Dog4 extends Animal {

    static void method(Animal a)

    {

        Dog4 d = (Dog4) a;// downcasting

        System.out.println("downcasting is ok");

    }

    public static void main(String[] args)

    {

        Animal a = new Dog4();

        Dog4.method(a);

    }

}

Hãy đi sâu vào vấn đề gần hơn chút, thực tế đối tượng được tham chiếu bởi biến a là một đối tượng của lớp Dog4. Vì vậy chúng ta thực hiện downcasting nó thì ok. Nhưng nếu code như sau thì chuyện gì sẽ xảy ra?

Ví dụ sử dụng toán tử instanceof để xác định kiểu phần tử của mảng

Output:

Code:

public class Test6 {

    public static void main(String[] args) {

     Object[] objArray = new Object[4];

     objArray[0] = "hello";

     objArray[1] = 1000L;

     objArray[2] = 20;

     objArray[3] = 'c';

     for (int i = 0; i < objArray.length; i++) {

        if (objArray[i] instanceof Integer)

        {

            System.out.println("kieu integer: " + objArray[i]);

        } 

        else if (objArray[i] instanceof Long)

        {

            System.out.println("kieu long: " + objArray[i]);

        } 

        else if (objArray[i] instanceof Character)

        {

            System.out.println("kieu char: " + objArray[i]);

        } 

        else

        {

            System.out.println("kieu khac: " + objArray[i]);

        }

        }

    }

}
FaCode Ngôn ngữ Java

_______________

Khóa học lập trình

7 Java frameworks phổ biến nhất hiện nay

xem thêm

________

FaCode là một seri học tập lập trình, lần này là FaCode ngôn ngữ Java, bằng mọi nỗ lực FaCode sẽ hoàn thành các mục tiêu đề ra trong FaCode Ngôn ngữ Java. Hãy đồng hành cùng FaCode Ngôn ngữ Java và theo dõi chúng tôi nhé. FaCode Ngôn ngữ Java rất mong nhận được lời góp ý từ phía cộng đồng. Share4Happy với phương châm chia sẻ để hạnh phúc.

Related posts

FaCode Ngôn ngữ Java những câu hỏi phỏng vấn về Hibernate trong Java

FaCode Ngôn ngữ Java những câu hỏi phỏng vấn về JSP trong Java

FaCode Ngôn ngữ Java những câu hỏi phỏng vấn servlet.