Ép kiểu, chuyển kiểu nguyên thủy Java
Việc gán một biến kiểu này bằng một giá trị có kiểu khác được hiểu là chuyển kiểu, ép kiểu (casting type).
Xem ví dụ sau:
int a = (int) 3.14; System.out.println(a); //Outputs 3
Code trên đã chuyển số 3.14 không phải là int thành kiểu int và gán vào a (giá trị sau khi ép kiểu là 3).
Ví dụ
double a = 42.571; int b = (int) a; System.out.println(b); //Outputs 42
Java cung cấp chuyển kiểu tự động từ kiểu số nguyên sang số thực dấu chấm động mà không giảm độ chính xác giá trị, còn ngược lại số thực sang số nguyên độ chính xác của giá trị sẽ bị giảm.
Bạn thấy việc ép kiểu, chuyển kiểu được thực hiện bằng cách viết tên kiểu trước biến, giá trị (typedata)var
Do đặc tính của từng loại dữ liệu số, độ lớn mà mỗi kiểu biểu diễn được mà độ chính xác của số bị thay đổi khi chuyển ép kiểu.
Chuyển kiểu mà độ chính xác không giảm
byte
⤍;short
⤍int
⤍long
⤍float
⤍double
Chuyển kiểu mà độ chính giảm theo chiều ngược lại
double
⤍;float
⤍long
⤍int
⤍short
⤍byte
Ép kiểu, chuyển kiểu đối tượng lớp Java
Với các lớp có hai cách chuyển kiểu, chuyển kiểu ngược(Upcasting) và xuôi(Downcasting)
Ví dụ có cây kế thừa các lớp C, B, C, D như sau (B kế thừa A, C kế thừa B …):
A |--B |--C |-D
Chuyển kiểu ngược là đối tượng lớp con được chuyển về một thành kiểu một lớp cha.
Ví dụ:
A var1 = new C();
Ở trên lớp C đã tự động chuyển thành kiểu lớp A
Chuyển kiểu xuôi, tức một kiểu cha chuyển thành kiểu con. Nhớ là nó không tự động mà phải viết chính xác lớp cần ép
A var1 = new A(); D var2 = (D)var1;