Xem thêm

Chuyển kiểu, ép kiểu trong Java - Giải mã thông tin về ép kiểu trong Java

Huy Erick
Chuyển kiểu và ép kiểu trong Java là khái niệm quan trọng khi lập trình. Khi ta làm việc với các biến và hằng số có kiểu dữ liệu khác nhau trong một biểu thức,...

Chuyển kiểu, ép kiểu trong Java

Chuyển kiểu và ép kiểu trong Java là khái niệm quan trọng khi lập trình. Khi ta làm việc với các biến và hằng số có kiểu dữ liệu khác nhau trong một biểu thức, chúng ta cần chuyển đổi chúng thành cùng một kiểu, gọi là ép kiểu. Trong bài viết này, chúng ta sẽ khám phá khái niệm này và cách thực hiện trong Java.

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

Ép kiểu (Type Conversion), hay còn gọi là ép kiểu (Type Casting), là quá trình chuyển đổi một biến từ một kiểu dữ liệu đã xác định trước sang một kiểu khác. Trình biên dịch Java sẽ tự động chuyển đổi các kiểu dữ liệu tương thích và ta cũng có thể thực hiện việc ép kiểu một cách thủ công và rõ ràng.

Trong Java, có hai loại ép kiểu: ép kiểu ngầm định và ép kiểu tường minh. Hãy tìm hiểu chi tiết về từng loại trong phần tiếp theo.

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

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

Việc ép kiểu ngầm định chỉ có thể thực hiện khi:

  • Hai kiểu dữ liệu chuyển đổi phải tương thích.
  • Cần chuyển đổi từ kiểu có dữ liệu nhỏ hơn sang kiểu lớn hơn.

Dưới đây là một ví dụ minh họa:

public class ImplicitConversion {
    public static void main(String[] args) {
        int intVariable = 25;
        long longVariable = intVariable;
        float floatVariable = longVariable;
        double doubleVariable = floatVariable;

        System.out.println("Giá trị Integer là: " + intVariable);
        System.out.println("Giá trị Long là: " + longVariable);
        System.out.println("Giá trị Float là: " + floatVariable);
        System.out.println("Giá trị Double là: " + doubleVariable);
    }
}

Kết quả:

Giá trị Integer là: 25
Giá trị Long là: 25
Giá trị Float là: 25.0
Giá trị Double là: 25.0

Quá trình chuyển đổi mà Java cho phép

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

Có thể chuyển đổi:

  • 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.

Dưới đây là ví dụ khác:

public class ImplicitConversion {
    public static void main(String[] args) {
        byte byteValue = 10;
        short shortValue = byteValue;
        int intValue = shortValue;
        long longValue = intValue;
        float floatValue = longValue;
        double doubleValue = floatValue;

        System.out.println("Giá trị Byte là: " + byteValue);
        System.out.println("Giá trị Short là: " + shortValue);
        System.out.println("Giá trị Integer là: " + intValue);
        System.out.println("Giá trị Long là: " + longValue);
        System.out.println("Giá trị Float là: " + floatValue);
        System.out.println("Giá trị Double là: " + doubleValue);
    }
}

Kết quả:

Giá trị Byte là: 10
Giá trị Short là: 10
Giá trị Integer là: 10
Giá trị Long là: 10
Giá trị Float là: 10.0
Giá trị Double là: 10.0

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

Ép kiểu tường minh (Explicit Conversion) là quá trình chuyển đổi dữ liệu một cách rõ ràng từ một kiểu dữ liệu sang một kiểu dữ liệu cụ thể. Đây cũng được gọi là ép kiểu hẹp (Narrowing Conversion). Ép kiểu này được thực hiện thủ công bởi lập trình viên, không phải trình biên dịch. Ép kiểu tường minh được sử dụng khi ta cần 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. Loại ép kiểu này có thể làm mất thông tin.

Dưới đây là một ví dụ:

public class ExplicitConversion {
    public static void main(String[] args) {
        double doubleValue = 100.04;
        long longValue = (long) doubleValue;
        int intValue = (int) longValue;

        System.out.println("Giá trị Double là: " + doubleValue);
        System.out.println("Giá trị Long là: " + longValue);
        System.out.println("Giá trị Int là: " + intValue);
    }
}

Kết quả:

Giá trị Double là: 100.04
Giá trị Long là: 100
Giá trị Int là: 100

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

Khi thực hiện chuyển kiểu và ép kiểu trong Java, ta cần lưu ý một số điểm sau đây. Với ép kiểu ngầm định, ta phải đảm bảo giá trị được ép kiểu phải phù hợp với mục đích mở rộng kiểu, và ngược lại với ép kiểu tường minh.

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

Nếu bạn cần sử dụng đối tượng của một lớp cha, bạn có thể áp dụng ép kiểu từ đối tượng của lớp con một cách tự động. Tuy nhiên, khi ép kiểu ngược lại, hãy cẩn thận để tránh các ngoại lệ không cần thiết.

Kết

Ép kiểu trong Java cho phép chuyển đổi kiểu dữ liệu từ lớn hơn sang nhỏ hơn. Nếu cần chuyển đổi từ kiểu nhỏ hơn hoặc hẹp hơn sang kiểu lớn hơn, trình biên dịch sẽ tự động chuyển đổi bằng cách sử dụng ép kiểu ngầm định. Trong bài viết này, chúng ta đã khám phá hai loại ép kiểu trong Java. Hi vọng rằng bạn đã hiểu rõ về khái niệm này và có thể áp dụng trong các dự án sắp tới.

Nếu bạn quan tâm đến việc tích hợ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 vào ứng dụng/website của doanh nghiệp, Stringee Communication APIs là giải pháp dành cho bạn. Đây là một bộ API giao tiếp cung cấp các tính năng giao tiếp tuyệt vời, giúp bạn tiết kiệm thời gian và chi phí. Hãy đăng ký để nhận được sự tư vấn tại đây:

Đăng ký nhận tư vấn

Image 1 Caption: Quá trình chuyển đổi mà Java cho phép

Image 2 Caption: Quá trình chuyển đổi mà Java cho phép

1