Bài viết này mình sẽ giới thiệu đến các bạn toán tử instanceof trong java và cách sử dụng nó để nhận biết kiểu dữ liệu.
Toán tử instanceof dùng để kiểm tra một đối tượng có phải là một thể hiện thuộc kiểu dữ liệu cụ thể hay không ( các lớp, interface…)
Toán tử instanceof sẽ trả về giá trị boolean tức là true hoặc false. Nếu bạn dùng toán tử instanceof với một biến có giá trị là null thì sẽ trả về giá trị false mặc dù biến đó có thể cùng kiểu dữ liệu.
Cách sử dụng toán tử instanceof trong java
Sử dụng với đối tượng thuộc lớp:
class Student { String name; int id; public static void main(String []args){ Student hs = new Student(); System.out.print(hs instanceof Student); } }
true
Vì đối tượng hs
thuộc lớp Student nên câu lệnh trên trả về giá trị true.
Sử dụng với đối tượng con của lớp cha:
class Animal{ int age; } class Dog extends Animal{ void eat(){ System.out.print("eating"); } } class Test{ public static void main(String[] args){ Dog dog = new Dog(); System.out.print( dog instanceof Animal); } }
true
Vậy một đối tượng thuộc lớp con cũng cùng kiểu dữ kiệu với lớp cha. Đối tượng dog tham chiếu đến Animal gọi là upcasting.
Sử dụng với biến có giá trị null:
Như đã nói ở trên, nếu bạn so sánh kiểu dữ liệu của một biến null thì kết quả trả về là false.
Xem ví dụ dưới đây
class Animal{ int age; } class Dog extends Animal{ void eat(){ System.out.print("eating"); } } class Test{ public static void main(String[] args){ Dog dog = null; System.out.print( dog instanceof Animal); } }
Kết quả trả về sẽ là false
false
Sử dụng toán tử instanceof với interface:
Tương tự như các class nếu một class implements từ một interface thì nó cũng thuộc kiểu dữ liệu của interface.
interface animal{ } class Dog implements animal{ } class Test{ public static void main(String[] args){ Dog dog = new Dog(); System.out.print( dog instanceof animal); } }
true
Quá trình downcasting
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 tham chiếu trực tiếp đến đối tượng cha thì sẽ biên dịch lỗi. Nếu bạn ép kiểu thì sẽ gặp ngoại lệ trong runtime. Cách dùng được khuyến khích là dùng toán tử instanceof để downcasting.
class Animal{ } class Dog extends Animal{ static void method( Animal animal){ if( animal instanceof Dog){ Dog dog = (Dog) animal; System.out.println("Downcasting"); } } } class Test{ public static void main(String[] args){ Animal animal = new Dog(); // Upcasting Dog.method(animal); //Downcasting System.out.print( animal instanceof Animal ); } }
Downcasting true
Bài viết mình đến đây là kết thúc. Cám ơn các bạn đã theo dõi !
Để lại một bình luận