Bài 10. Hướng Dẫn Chuyển Đổi Kiểu Dữ Liệu Trong Java | Tự Học Java Căn Bản
- Published on

- Chuyển đổi kiểu dữ liệu trong Java là gì?
- Chuyển đổi kiểu ngầm định (Implicit Casting)
- Chuyển đổi kiểu tường minh (Explicit Casting)
- Chuyển đổi giữa kiểu dữ liệu nguyên thủy và kiểu đối tượng
- Chuyển từ kiểu nguyên thủy sang đối tượng (Boxing)
- Chuyển từ đối tượng sang kiểu nguyên thủy (Unboxing)
- Autoboxing và Auto-unboxing
- Chuyển đổi giữa kiểu số và kiểu chuỗi String
- Chuyển số thành chuỗi String
- Chuyển chuỗi String thành số
- Chuyển đổi kiểu dữ liệu tham chiếu (Lớp và Đối tượng)
- Chuyển đổi từ lớp con lên lớp cha (Upcasting)
- Downcasting (Chuyển từ lớp cha xuống lớp con)
- Kết luận:
- Bài tập thực hành
Chuyển đổi kiểu dữ liệu trong Java là gì?
Chuyển đổi kiểu dữ liệu (Type Casting) trong Java là quá trình thay đổi kiểu của một giá trị từ kiểu dữ liệu này sang kiểu dữ liệu khác. Java hỗ trợ nhiều loại chuyển đổi kiểu khác nhau, bao gồm:
- Chuyển đổi kiểu ngầm định (Implicit Casting)
- Chuyển đổi kiểu tường minh (Explicit Casting)
- Chuyển đổi giữa kiểu dữ liệu nguyên thủy và kiểu đối tượng (Boxing và Unboxing)
- Chuyển đổi giữa các kiểu số và chuỗi (String)
- Chuyển đổi giữa các kiểu dữ liệu tham chiếu (Reference Type Casting)
Chuyển đổi kiểu ngầm định (Implicit Casting)
Chuyển đổi kiểu ngầm định (còn gọi là Widening Casting) xảy ra khi Java tự động chuyển một giá trị từ kiểu dữ liệu có kích thước nhỏ hơn sang kiểu dữ liệu có kích thước lớn hơn mà không làm mất dữ liệu.
Kiểu nhỏ hơn | Có thể chuyển đổi sang |
---|---|
byte | short int long float double |
short | int long float double |
int | long float double |
long | float double |
float | double |
Ví dụ:
public class ImplicitCastingExample {
public static void main(String[] args) {
int myInt = 100;
double myDouble = myInt; // Tự động chuyển từ int sang double
System.out.println("Giá trị int: " + myInt);
System.out.println("Giá trị double: " + myDouble);
}
}
- Biến
myInt
có kiểuint
và được gán giá trị 100. - Biến
myDouble
có kiểudouble
, nhận giá trị từmyInt
mà không cần ép kiểu. - Java tự động chuyển đổi từ
int
sangdouble
mà không làm mất dữ liệu.
Chuyển đổi kiểu tường minh (Explicit Casting)
Chuyển đổi kiểu tường minh (còn gọi là Narrowing Casting) thường là khi chúng ta chuyển từ kiểu dữ liệu có kích thước lớn hơn về kiểu dữ liệu có kích thước nhỏ hơn. Việc này yêu cầu lập trình viên sử dụng dấu ngoặc đơn để chỉ rõ kiểu cần chuyển đổi.
Thực tế thì ép kiểu tường minh không phụ thuộc vào việc kiểu đích có kích thước nhỏ hơn hay lớn hơn. Mà chỉ cần bạn sử dụng dấu ngoặc đơn (type) để yêu cầu chuyển đổi kiểu, thì đó luôn là ép kiểu tường minh, bất kể kiểu đích có lớn hơn hay nhỏ hơn kiểu gốc.
Kiểu lớn hơn | Có thể chuyển đổi sang |
---|---|
double | float long int short byte |
float | long int short byte |
long | int short byte |
int | short byte |
short | byte |
Ví dụ:
public class ExplicitCastingExample {
public static void main(String[] args) {
double myDouble = 9.78;
int myInt = (int) myDouble; // Chuyển đổi từ double sang int
System.out.println("Giá trị double ban đầu: " + myDouble);
System.out.println("Giá trị int sau khi ép kiểu: " + myInt);
}
}
- Biến
myDouble
có kiểudouble
với giá trị 9.78. - Khi chuyển đổi
double
sangint
, phần thập phân bị mất (9.78 trở thành 9). - Cần chỉ định rõ kiểu
(int) myDouble
để Java hiểu rằng bạn muốn chuyển đổi từ kiểudouble
sangint
.
Chuyển đổi giữa kiểu dữ liệu nguyên thủy và kiểu đối tượng
Java cung cấp các lớp bao (Wrapper Class) như Integer, Double, Float, ... để chuyển đổi giữa kiểu nguyên thủy và đối tượng.
Chuyển từ kiểu nguyên thủy sang đối tượng (Boxing)
public class BoxingExample {
public static void main(String[] args) {
int num = 100;
Integer obj = Integer.valueOf(num); // Boxing (chuyển đổi từ int sang Integer)
System.out.println("Giá trị Integer object: " + obj); // Giá trị Integer object: 100
}
}
- Phương thức Integer.valueOf(num) tạo một đối tượng Integer từ giá trị int.
- Lúc này
obj
là một đối tượngInteger
chứa giá trị 100. Khi in ra đối tượng này, phương thức toString() của lớp Integer sẽ tự động được gọi, và giá trị của nó sẽ được hiển thị dưới dạng 100.
Chuyển từ đối tượng sang kiểu nguyên thủy (Unboxing)
public class UnboxingExample {
public static void main(String[] args) {
Integer obj = 50; // Boxing tự động (autoboxing)
int num = obj.intValue(); // Unboxing (chuyển đổi từ Integer sang int)
System.out.println("Giá trị int: " + num);
}
}
obj.intValue()
thực hiện quá trình unboxing, tức là chuyển đối tượngInteger
về giá trị nguyên thủyint
.- Ở đây,
obj
là đối tượngInteger
, và phương thứcintValue()
giúp lấy giá trị nguyên thủy 50 từ đối tượng này.
Autoboxing và Auto-unboxing
Java cung cấp một cơ chế tự động gọi boxing và unboxing, được gọi là autoboxing và auto-unboxing. Điều này giúp chúng ta không cần phải gọi các phương thức như valueOf()
hoặc intValue()
trong các tình huống đơn giản.
Ví dụ:
public class AutoBoxingExample {
public static void main(String[] args) {
int num = 100;
Integer obj = num; // Autoboxing (tự động chuyển từ int sang Integer)
System.out.println("Giá trị Integer object: " + obj);
int num2 = obj; // Auto-unboxing (tự động chuyển từ Integer sang int)
System.out.println("Giá trị int: " + num2);
}
}
String
Chuyển đổi giữa kiểu số và kiểu chuỗi String
Chuyển số thành chuỗi Bạn có thể sử dụng phương thức String.valueOf()
hoặc toán tử +""
để chuyển đổi số thành chuỗi.
Ví dụ:
public class NumberToString {
public static void main(String[] args) {
int num = 123;
String str1 = String.valueOf(num);
String str2 = num + ""; // Hoặc sử dụng toán tử +
System.out.println("Chuỗi từ int: " + str1);
System.out.println("Chuỗi từ int (cách 2): " + str2);
}
}
String
thành số
Chuyển chuỗi Dùng các phương thức Integer.parseInt()
, Double.parseDouble()
, Float.parseFloat()
, v.v.
Ví dụ:
public class StringToNumber {
public static void main(String[] args) {
String str = "456";
int num = Integer.parseInt(str);
double dnum = Double.parseDouble(str);
System.out.println("Số nguyên từ chuỗi: " + num);
System.out.println("Số thực từ chuỗi: " + dnum);
}
}
Chuyển đổi kiểu dữ liệu tham chiếu (Lớp và Đối tượng)
Java hỗ trợ chuyển đổi kiểu giữa các lớp cha và lớp con khi sử dụng kế thừa extends
.
- Upcasting: Chuyển từ lớp con lên lớp cha (tự động).
- Downcasting: Chuyển từ lớp cha xuống lớp con (cần ép kiểu).
Chuyển đổi từ lớp con lên lớp cha (Upcasting)
- Tự động thực hiện nếu lớp con kế thừa lớp cha.
- Không cần ép kiểu.
Ví dụ:
class Animal {
void makeSound() {
System.out.println("Some sound...");
}
}
class Dog extends Animal {
void bark() {
System.out.println("Gâu gâu!");
}
}
public class UpcastingExample {
public static void main(String[] args) {
Animal myDog = new Dog(); // Upcasting từ Dog → Animal
myDog.makeSound();
}
}
Downcasting (Chuyển từ lớp cha xuống lớp con)
- Cần ép kiểu tường minh.
- Có thể gây lỗi ClassCastException nếu không kiểm tra trước.
Ví dụ:
public class DowncastingExample {
public static void main(String[] args) {
Animal myAnimal = new Dog(); // Upcasting
Dog myDog = (Dog) myAnimal; // Downcasting (ép kiểu)
myDog.bark();
}
}
Để chắc chắn, cần kiểm tra trước khi ép kiểu bằng instanceof để tránh lỗi.
if (myAnimal instanceof Dog) {
Dog myDog = (Dog) myAnimal;
myDog.bark();
}
Kết luận:
Chuyển đổi kiểu dữ liệu trong Java là một khái niệm quan trọng giúp lập trình viên có thể làm việc với nhiều loại dữ liệu khác nhau một cách linh hoạt. Java hỗ trợ hai phương thức chuyển đổi kiểu chính: Chuyển đổi kiểu ngầm định (Implicit Casting) và Chuyển đổi kiểu tường minh (Explicit Casting).
- Chuyển đổi kiểu ngầm định (Widening Casting) xảy ra khi Java tự động chuyển đổi giá trị từ kiểu dữ liệu nhỏ hơn sang kiểu dữ liệu lớn hơn mà không cần sự can thiệp của người lập trình.
- Chuyển đổi kiểu tường minh (Narrowing Casting) yêu cầu người lập trình chỉ định rõ ràng kiểu đích, vì kiểu này có thể mất dữ liệu (ví dụ: chuyển từ
double
sangint
).
Ngoài ra, Java cung cấp các lớp bao (Wrapper Classes) như Integer
, Double
, Float
, ... để hỗ trợ chuyển đổi giữa kiểu dữ liệu nguyên thủy và kiểu đối tượng, thông qua cơ chế Boxing (chuyển từ kiểu nguyên thủy sang đối tượng) và Unboxing (chuyển từ đối tượng sang kiểu nguyên thủy).
Chuyển đổi kiểu còn xuất hiện trong các kỹ thuật như Upcasting và Downcasting trong kế thừa (Inheritance), cho phép linh hoạt trong việc sử dụng các đối tượng con thông qua tham chiếu lớp cha, đồng thời vẫn có thể thực thi các phương thức phù hợp với loại đối tượng thực tế.
Loại chuyển đổi | Mô tả | Ví dụ |
---|---|---|
Chuyển đổi kiểu ngầm định (Implicit Casting / Widening Casting) | Chuyển đổi từ kiểu dữ liệu có kích thước nhỏ hơn sang kiểu dữ liệu có kích thước lớn hơn mà không cần sự can thiệp của lập trình viên. | int → long, float → double. |
Chuyển đổi kiểu tường minh (Explicit Casting / Narrowing Casting) | 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. Cần phải chỉ định rõ ràng và có thể mất dữ liệu. | double → int, long → short. |
Boxing (Chuyển từ kiểu nguyên thủy sang đối tượng) | Chuyển đổi từ kiểu nguyên thủy thành đối tượng (Wrapper Class). | int → Integer, double → Double. |
Unboxing (Chuyển từ đối tượng sang kiểu nguyên thủy) | Chuyển đối tượng (Wrapper Class) về kiểu nguyên thủy tương ứng. | Integer → int, Double → double. |
Upcasting (Chuyển từ lớp con về lớp cha) | Quá trình chuyển một đối tượng của lớp con thành tham chiếu của lớp cha, cho phép sử dụng các phương thức của lớp cha. | Dog → Animal, Car → Vehicle. |
Downcasting (Chuyển từ lớp cha về lớp con) | Chuyển một đối tượng từ lớp cha về lớp con, có thể gây ra lỗi nếu không thực hiện kiểm tra kiểu hợp lệ. | Animal → Dog, Vehicle → Car (phải kiểm tra kiểu trước khi downcast). |
Việc hiểu và áp dụng đúng cách các kỹ thuật chuyển đổi kiểu dữ liệu sẽ giúp lập trình viên tối ưu hóa mã nguồn và tránh được các lỗi về kiểu dữ liệu trong quá trình phát triển ứng dụng Java.
Bài tập thực hành
Hãy viết chương trình nhận đầu vào là một số thực double
, sau đó:
- Chuyển số thực này sang
int
và in ra màn hình. - Chuyển số đó thành chuỗi và hiển thị.
- Chuyển chuỗi đó trở lại số nguyên
int
và in ra.
Bài tiếp theo: Bài 11. Các phép toán cơ bản trong Java
Bài viết mới nhất
Bài 26. Cách Sử Dụng break, continue và return Trong Java | Tự Học Java Căn Bản
Hướng dẫn cách sử dụng câu lệnh break, continue và return trong Java để kiểm soát vòng lặp và luồng thực thi chương trình hiệu quả.
Bài 25. Vòng Lặp do-while Trong Java | Tự Học Java Căn Bản
Hướng dẫn chi tiết về vòng lặp do-while trong Java, cách sử dụng, cú pháp, ví dụ minh họa và so sánh với vòng lặp while.
Bài 24. Cách Chuyển Đổi Số Từ Thập Phân Sang Nhị Phân Trong Java | Tự Học Java Căn Bản
Hướng dẫn cách chuyển đổi số từ hệ thập phân sang hệ nhị phân trong Java bằng nhiều phương pháp khác nhau, kèm theo ví dụ minh họa.
Bài 23. Cách Sử Dụng Vòng Lặp While Trong Java | Tự Học Java Căn Bản
Tìm hiểu cách sử dụng vòng lặp while trong Java với cú pháp, ví dụ thực tế và ứng dụng trong lập trình Java.
Bài viết liên quan
Bài 26. Cách Sử Dụng break, continue và return Trong Java | Tự Học Java Căn Bản
Hướng dẫn cách sử dụng câu lệnh break, continue và return trong Java để kiểm soát vòng lặp và luồng thực thi chương trình hiệu quả.
Bài 25. Vòng Lặp do-while Trong Java | Tự Học Java Căn Bản
Hướng dẫn chi tiết về vòng lặp do-while trong Java, cách sử dụng, cú pháp, ví dụ minh họa và so sánh với vòng lặp while.
Bài 24. Cách Chuyển Đổi Số Từ Thập Phân Sang Nhị Phân Trong Java | Tự Học Java Căn Bản
Hướng dẫn cách chuyển đổi số từ hệ thập phân sang hệ nhị phân trong Java bằng nhiều phương pháp khác nhau, kèm theo ví dụ minh họa.
Bài 23. Cách Sử Dụng Vòng Lặp While Trong Java | Tự Học Java Căn Bản
Tìm hiểu cách sử dụng vòng lặp while trong Java với cú pháp, ví dụ thực tế và ứng dụng trong lập trình Java.
