Tìm hiểu về các kiểu chuyển đổi dữ liệu trong Java (Java Type Conversion)
Trong một số trường hợp khi lập trình, bạn phải trộn lẫn cả biến số và hằng số. Lúc này, chúng ta cần sự trợ giúp của Java Type Conversion (ép kiểu trong Java) để đưa về cùng một hình thức. Vậy có những loại ép kiểu nào trong Java?
Table of Contents
Trong một số trường hợp khi lập trình, người dùng sẽ gặp hiện tượng trộn lẫn giữa các kiểu biến số và hằng số khác nhau. Để giải quyết vấn đề này, bạn cần biết cách chuyển chúng thành một kiểu, hay gọi bằng ngôn ngữ trong ngành công nghệ thông tin là ép kiểu. Bạn đã thực sự biết về khái niệm ép kiểu trong Java? Trong bài viết này, FUNiX sẽ giới thiệu đến bạn những thông tin bổ ích về Java Type Conversion.
1. Thếnào là ép kiểu trong Java?
Java cung cấp nhiều kiểu dữ liệu khác nhau có thể giống như bất kỳ ngôn ngữ động nào khác như boolean, char, int, unsigned int, sign int, float, double, long… tổng cộng cung cấp 7 kiểu mà mỗi kiểu dữ liệu có được không gian khác nhau trong khi lưu trữ trong bộ nhớ. Khi bạn gán giá trị của một kiểu dữ liệu này cho ra một kiểu dữ liệu khác, hai kiểu có thể không tương thích với nhau. Nếu các kiểu dữ liệu tương thích, thì Java sẽ tự động thực hiện chuyển đổi được gọi là Chuyển đổi kiểu tự động, và nếu không thì chúng cần được truyền hoặc chuyển đổi một cách rõ ràng. Ví dụ: gán một giá trị int cho một biến dài.
Khi các biến và hằng số của các kiểu khác nhau sẽ được đặt cùng nhau trong một biểu thức, chúng có thể được thay đổi thành một kiểu tương tự. Kỹ thuật chuyển đổi một kiểu được xác định trước duy nhất thành một kiểu khác được gọi là chuyển đổi kiểu trong Java.
>>> Xem thêm: Lập trình hướng đối tượng trong Java
2. Các hình thức ép kiểu trong Java
2.1 Ép kiểu kiểu ngầm định (Implicit Type Conversion)
Đây thường là những gì dân lập trình gọi là Chuyển đổi mở rộng và chúng có thể được thực hiện tự động khi muốn chuyển sang các loại dữ liệu rộng hơn mà không cần đến lập trình viên. Lấy ví dụ, nếu bạn đang có một kiểu số nguyên 32 bit và muốn chuyển sang kiểu số nguyên 64 bit, điều này hoàn toàn có thể được chuyển đổi tự động mà giá trị sẽ an toàn trong quá trình di chuyển. Đây được xem là một kiểu chuyển đổi ngầm định. Trình biên dịch (compiler) phải quyết định làm thế nào để thực hiện các chuyển đổi này và các quy tắc trở nên khá đơn giản.
Ví dụ:
- Nếu bạn có một biểu thức với nhiều kiểu dữ liệu số nguyên hỗn hợp (multiple Mixed integer sizes) trong đó, có kiểu short (2 bytes) và kiểu long (4 bytes), hay bất kể loại dữ liệu số nguyên nào khác, mọi thứ đều sẽ chuyển đổi một cách linh hoạt. Vì vậy, khi thực hiện một phép toán với kiểu short và kiểu long, thì kiểu short sẽ nhanh chóng chuyển thành long một cách ngầm định.
- Khi bạn thực hiện một phép toán với các kiểu dấu phẩy động hỗn hợp (mixed floating-point), khi đó bạn sẽ có 2 kiểu dữ liệu bao gồm float và double, máy sẽ tự động chuyển sang kiểu dữ liệu double vì đây là kiểu lớn nhất trong kiểu dấu phẩy động.
- Và sau đó, nếu bạn có một phép toán sử dụng kiểu số nguyên hỗn hợp (mixed integer types) và kiểu dấu phẩy động (floating-point types), trình biên dịch (compiler) sẽ chuyển thành bất kỳ dấu phẩy động lớn nhất nào trong phương trình.
- Với một phép toán với một kiểu long và kiểu double, thì máy sẽ tự động chuyển đổi kiểu dữ liệu long thành kiểu double
Thông qua các ví dụ ở trên, bạn đọc hoàn toàn có thể hình dung về hình thức ép kiểu ngầm định trong Java. Trong quá trình làm việc, bạn dễ dàng phân biệt và xử lý một cách gọn nhẹ.
2.2 Ép kiểu tường minh
Bạn cần phải thực hiện rõ ràng mọi thứ với mã code của mình khi sử dụng thao tác này. Khi làm điều đó, bạn cần chịu trách nhiệm về bất kỳ điều gì xảy ra khi sử dụng loại chuyển đổi này. Do đó, bạn hoàn toàn có thể thực hiện cả 2 kiểu chuyển đổi là mở rộng và thu hẹp dữ liệu. Ép kiểu tường minh có thể mở rộng từ kiểu 32-bit lên kiểu 64-bit và ngược lại giới hạn xuống từ 64-bit xuống 32-bit.
Nếu bạn thực hiện phép ép kiểu kiểu dấu phẩy động (floating-point) sang kiểu số nguyên (Integer), thì dấu phẩy động có thể có phần thập phân nhưng sẽ không có ở kiểu số nguyên, vì vậy nên bất kỳ phần phân số nào cũng sẽ bị loại bỏ khi bạn ép kiểu thành kiểu số nguyên.
Bạn cần phải cẩn thận khi thực hiện chuyển đổi thu hẹp. Nếu bạn có một kiểu dữ liệu số nguyên 64 bit (64 bit integer), ép kiểu tường minh hoàn toàn có thể giữ lại được các giá trị vô cùng lớn đó để ép vừa với kiểu số nguyên 32 bit. Vì vậy với kiểu ép từ dữ liệu lớn sang dữ liệu nhỏ, bạn nên làm việc cẩn thận để tránh những trường hợp không may xảy ra như mất dữ liệu hay biến đổi dữ liệu.
Điều cuối cùng bạn cần lưu ý là nên cẩn thận khi chuyển đổi từ kiểu số nguyên (Integer) sang dấu phẩy động (floating-point), vì do kiểu số nguyên chứa đựng số lượng lớn chữ số có nghĩa, hoặc vì cách lưu trữ các dấu phẩy động mà bạn có thể làm mất một số các chữ số có nghĩa đó.
Thêm phần ví dụ + ảnh mô tả các câu lệnh (như trong bài gốc). Với các bài chuyên môn kỹ thuật và có mô tả về thao tác, câu lệnh thì các ví dụ cụ thể về câu lệnh rất cần thiết. Cuối bài nhớ dẫn nguồn về bài gốc nhé.
3. Ví dụ
Bạn đọc hãy theo dõi ví dụ dưới đây để hiểu hơn về các kiểu ép kiểu trong Java !
Chúng ta có một chương trình đơn giản như ví dụ ở trên, với một số biến khai báo điển hình như Float, double, byte, short, long và mỗi biến được đặt tên dễ dàng nhận diện như: LongVal, byte_Val,…
Khi chạy thành công, chương tình sẽ in ra thông báo trên màn hình với dòng chữ “Success”
Đến đây, chúng ta hãy xem cách loại ép kiểu đang hoạt động trong chương trình này. Vì vậy, trước hết, hãy tiếp tục và tạo một biến. Chúng ta đang thấy kiểu Short, và đây cũng chính là result.
Trên thực tế, hãy tiếp tục và gọi nó là result1. Và chúng ta hãy làm một nhiệm vụ đơn giản. Và vì vậy, trước tiên, chúng ta sẽ chỉ định byteVal cho nó. Bây giờ hãy cùng mong rằng chương trình chạy thử sẽ thành công.
Output:
Ta biết rằng đó là một phép gán hợp lệ vì một byte có thể được chuyển đổi sang kiểu Short vì đây là kiểu chuyển đổi mở rộng.
Tuy nhiên, nếu chúng ta thay thế byteVal thành longVal, thì khi chạy thử màn hình sẽ báo lỗi liên quan đến việc không tương thích giữa hai kiểu có thể mất chuyển đổi từ long thành short
Vì vậy, điều chúng ta làm ở đây là có thể thực hiện ép kiểu tường minh. Ta chỉ cần đặt Short ở trước nó và bây giờ chương trình hoàn toàn hợp lệ để chạy thử.
Bạn có thể nhìn kết quả và rút ra nhận xét rằng: chỉ cần chúng ta áp dụng ép kiểu tường minh đối với chương trình này, bài toán khó đã hoàn toàn được giải quyết.
4. Kết luận
Việc thay đổi từ dữ liệu này sang kiểu dữ liệu khác được gọi chung là ép kiểu. Người dùng hoàn toàn có khả năng chuyển đổi các kiểu dữ liệu dung lượng lớn sang nhỏ một cách dễ dàng. Nếu bạn cần thay đổi ngược lại từ nhỏ sang lớn, trình biên dịch tự động (compiler) sẽ đảm nhiệm chức năng của mình bằng ép kiểu ngầm định trong Java. Hy vọng qua bài viết này, bạn đọc có hình dung rõ hơn về các hình thức ép kiểu trong Java (Java type conversion) và có thể áp dụng trong các dự án của mình thành công. Hẹn gặp lại các bạn ở những bài viết tiếp theo của Funix.
>>> Nếu bạn đang có nhu cầu học lập trình trực tuyến, tìm hiểu ngay tại đây:
- Tất cả những điều bạn cần biết về khóa học lập trình tại FUNiX FPT
- 5 Điểm đáng chú ý tại khóa học lập trình trực tuyến FPT – FUNiX
- Từ A-Z chương trình học FUNiX – Mô hình đào tạo lập trình trực tuyến số 1 Việt Nam
- Lý do phổ biến khiến học viên nước ngoài chọn FUNiX
- Lưu ý để học blockchain trực tuyến hiệu quả cao tại FUNiX
- Lý do nữ giới nên chọn FUNiX để học chuyển nghề IT
- FUNiX trở thành đối tác của Liên minh Blockchain Việt Nam
- 3 lý do bạn trẻ nên học blockchain trực tuyến ở FUNiX
Nguyễn Huyền (theo Educba.com)
Bình luận (0
)