Có một số trường hợp khi lập trình mà các kiểu hằng số và biến khác nhau trộn lẫn trong một biểu thức. Để thực hiện hành động trên những hằng số và biến này, chúng ta cần chuyển đổi chúng thành cùng một kiểu hay còn gọi là ép kiểu. Trong bài viết này, chúng ta sẽ tìm hiểu về khái niệm ép kiểu trong Java, vốn được sử dụng để chuyển đổi một giá trị đã xác định trước thành một kiểu khác.

1. Chuyển kiểu, ép kiểu trong Java là gì?

Ép kiểu - Type conversion hay Type Casting là quá trình chuyển đổi một biến cả một kiểu được xác định trước thành một kiểu khác. Nếu kiểu dữ liệu này tương thích với kiểu khác, java compiler sẽ tự động chuyển đổi chúng và nếu không, lập trình viên sẽ cần ép kiểu chúng một cách thủ công và rõ ràng.

Trong Java tồn tại 2 loại ép kiểu: ép kiểu ngầm(tự động) và ép kiểu tường minh. Cùng tìm hiểu chi tiết về hai kiểu ép này trong phần tiếp theo nhé.

2. Ép kiểu ngầm định trong Java

Đây là quá trình chuyển đổi tự động giữa các kiểu dữ liệu bằng trình biên dịch mà không cần lập trình viên tác động. Quá trình này còn được gọi là ép kiểu nới rộng(widening conversion) vì trình biên dịch chuyển giá trị có kiểu từ nhỏ hơn thành kiểu có kích thước lớn hơn, giả dụ là ép kiểu từ int sang thành long. Kiểu biến đổi này không làm mất thông tin.

Vì là kiểu chuyển đổi tự động nên nó sẽ có một số điều kiện nhất định để có thể đạt được, cụ thể ở đây cách ép kiểu này chỉ có thể được thực hiện khi:

Hai kiểu dữ liệu chuyển đổi phải là tương thích

Có nhu cầu chuyển đổi từ kiểu có dữ liệu nhỏ hơn sang thành lớn hơn

Hình ảnh trên cho thấy quá trình chuyển đổi mà Java cho phép. Ví dụ, trình biên dịch chuyển đổi tự động dữ liệu byte thành kiểu ngắn vì byte nhỏ hơn (8 bit) hoặc hẹp hơn short (16 bit).

byte ——— có thể chuyển đổi thành ————-> short, int, long, float, hoặc double

Short ——— có thể chuyển đổi thành ————-> int, long, float hoặc double

char ——— có thể chuyển đổi thành ————-> int, long, float hoặc double

int ——— có thể chuyển đổi thành ————-> long, float, hoặc double

long ——— có thể chuyển đổi thành ————-> float hoặc double

float ——— có thể chuyển đổi thành ————-> double

Chúng ta có thể tham khảo ví dụ sau:


public class ImplicitConversion {



    public static void main(String[] args) {



        int intVariable = 25;

        long longVariable = intVariable;

        float floatVariable = longVariable;

        double doubleVariable = floatVariable;



        System.out.println("Integer value is: " + intVariable);

        System.out.println("Long value is: " + longVariable);

        System.out.println("Float value is: " + floatVariable);

        System.out.println("Double value is: " + doubleVariable);



    }



}

 

Output:


Integer value is: 25



Long value is: 25



Float value is: 25.0



Double value is: 25.0

Xem thêm bài viết:

- Tìm hiểu về design pattern factory trong java

- HashMap trong Java

- Tìm hiểu về Deadlock trong Java

3. Ép kiểu tường minh trong Java

Ép kiểu tường minh là quá trình chuyển đổi dữ liệu một cách tường minh thành một kiểu dữ liệu cụ thể. Chúng ta cũng có thể gọi nó là ép kiểu hẹp (Narrowing Conversion). Kiểu ép kiểu này được thực hiện thủ công bởi lập trình viên, chứ không phải trình biên dịch. Chúng ta cần thực hiện ép kiểu tường minh khi có nhu cầu chuyển đổi từ kiểu dữ liệu có kích thước lớn hơn sang kiểu có kích thước nhỏ hơn. Kiểu biến đổi này có thể làm mất thông tin.

Ví dụ:


public class ExplicitConversion {



    public static void main(String[] args) {



        double doubleValue = 100.04;

        long longValue = (long) doubleValue; // narrow data type from double to long

        int intValue = (int) longValue; // narrow data type from long to int



        System.out.println("Double value: " + doubleValue);

        System.out.println("Long value: " + longValue);

        System.out.println("Int value:  " + intValue);



    }

}

 

Output:


Double value: 100.04



Long value: 100



Int value:  100

4. Các điểm cần lưu ý khi thực hiện chuyển kiểu, ép kiểu trong Java

Với các loại ép kiểu chúng ta cần có những lưu ý riêng. Với ép kiểu ngầm định, chúng ta phải đảm bảo các giá trị được ép kiểu phải là cho mục đích mở rộng kiểu và ngược lại với việc ép kiểu tường minh.

Mặc dù các ví dụ chúng ta tìm hiểu trong bài viết đều là các ví dụ làm với các kiểu nguyên thủy, chúng ta hoàn toàn có thể áp dụng 2 quy tắc trên vào việc ép kiểu cho các kiểu dữ liệu lớp mà chúng ta tự tạo. Các quy tắc thực hiện với các loại ép kiểu vẫn sẽ là tương tự.

Nếu bạn cần đối tượng của các lớp superclass thì việc truyền vào đối tượng của một lớp con hoàn toàn là điều có thể được thực hiện một cách tự động. Và tất nhiên là với trường hợp ngược lại, để tránh được exception không đáng có trong quá trình phát triển, các bạn phải rất cẩn trọng khi thu hẹp kiểu sử dụng phép ép kiểu.

Kết

Chúng ta gọi quá trình thay đổi giá trị từ kiểu dữ liệu này sang kiểu dữ liệu khác là ép kiểu. Sử dụng ép kiểu trong Java bạn có thể chuyển đối kiểu dữ liệu lớn hơn thành kiểu nhỏ hơn. Và nếu việc chuyển đổi cần được thực hiện từ các kiểu nhỏ hơn hoặc hẹp hơn sang các kiểu lớn hơn, thì trình biên dịch sẽ tự động chuyển đổi chúng bằng cách sử dụng ép kiểu ngầm định. Trong bài viết này, chúng ta đã thảo luận về hai kiểu ép kiểu trong Java, hy vọng bạn đã hiểu rõ về ép kiểu và có thể áp dụng trong các dự án sắp tới. 


Stringee Communication APIs là giải pháp cung cấp các tính năng giao tiếp như gọi thoại, gọi video, tin nhắn chat, SMS hay tổng đài CSKH cho phép tích hợp trực tiếp vào ứng dụng/website của doanh nghiệp nhanh chóng. Nhờ đó giúp tiết kiệm đến 80% thời gian và chi phí cho doanh nghiệp bởi thông thường nếu tự phát triển các tính năng này có thể mất từ 1 - 3 năm.

Bộ API giao tiếp của Stringee hiện đang được tin dùng bởi các doanh nghiệp ở mọi quy mô, lĩnh vực ngành nghề như TPBank, VOVBacsi24, VNDirect, Shinhan Finance, Ahamove, Logivan, Homedy,  Adavigo, bTaskee…

Quý bạn đọc quan tâm xin mời đăng ký NHẬN TƯ VẤN TẠI ĐÂY: