Mục lục
Khi gán giá trị của một kiểu dữ liệu cho một kiểu dữ liệu khác thì bắt buộc phải ép kiểu.
Ví dụ ép kiểu một số long về int.
int i = (long)3L;
Ép kiểu tự động
Ép kiểu tự động diễn ra khi:
- Kiểu dữ liệu của biến tham chiếu tương thích với giá trị gán.
- Khi gán giá trị của kiểu dữ liệu bé sang kiểu dữ liệu lớn hơn.
Thứ tự tăng dần của các kiểu dữ liệu nguyên thủy
int-> short -> int -> long -> float -> double
Ví dụ tự động chuyển đổi trong kiểu dữ liệu nguyên thủy.
class Test { public static void main(String[] args) { int i = 100; // automatic type conversion long l = i; // automatic type conversion float f = l; System.out.println("Int value "+i); System.out.println("Long value "+l); System.out.println("Float value "+f); } }
Ép kiểu tường minh
Nếu chúng ta muốn gán 1 giá trị của kiểu dữ liệu lớn sang kiểu dữ liệu nhỏ hơn chúng ta phải ép kiểu về kiểu dữ liệu nhỏ hơn.
Double -> Float -> Long -> Int - Short -> Byte
class Test { public static void main(String[] args) { double d = 100.04; //explicit type casting long l = (long)d; //explicit type casting int i = (int)l; System.out.println("Double value "+d); //fractional part lost System.out.println("Long value "+l); //fractional part lost System.out.println("Int value "+i); } }
Phép toán tự động ép kiểu
Khi thực hiện các phép toán các giá trị trung gian có thể vượt quá phạm vi toán hạng, do đó java sẽ tự động ép kiểu:
- Java sẽ tự động ép kiểu byte, short, char sang int khi tính toán.
- Nếu kết quả là long, double, hoặc float thì toàn bộ biểu thức sẽ được ép kiểu sang long, double hoặc float tương ứng.
class Test { public static void main(String args[]) { byte b = 42; char c = 'a'; short s = 1024; int i = 50000; float f = 5.67f; double d = .1234; // The Expression double result = (f * b) + (i / c) - (d * s); //Result after all the promotions are done System.out.println("result = " + result); } }
Ép kiểu tường minh cho phép toán
Khi thực hiện các phép toán kết quả sẽ tự động ép kiểu sang kiểu dữ liệu lớn hơn, nhưng nếu kết quả là kiểu dữ liệu nhỏ hơn thì chúng ta bắt buộc phép ép kiểu dữ kiệu của kết quả xuống.
class Test { public static void main(String args[]) { byte b = 50; //type casting int to byte b = (byte)(b * 2.343d); System.out.println(b); } }
Nguồn tham khảo
https://www.geeksforgeeks.org/type-conversion-java-examples/