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.
1 2 3 4 5 6 |
|
Output:
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.
1 2 3 4 5 6 7 8 9 |
|
Output:
true
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ụ.
1 2 3 4 5 6 |
|
Output:
false
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:
1 |
|
Sử dụng ép kiểu dữ liệu:
1 2 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
Output:
downcasting is ok
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
Output:
downcasting is ok
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?
1 2 3 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
|
Output:
kieu khac: hello kieu long: 1000 kieu integer: 20 kieu char: c
Nguồn tin: viettuts