Kiểu Dữ Liệu (Data Types)

Kiểu dữ liệu (data type) trong lập trình Java quy định kích thước và loại giá trị mà một biến có thể lưu trữ. Java có hai loại kiểu dữ liệu chính: Kiểu dữ liệu nguyên thủy (Primitive Data Types), Kiểu dữ liệu phi nguyên thủy (Non-primitive Data Types).

Hệ thống các kiểu dữ liệu trong Java - minh họa
Ảnh mô tả hệ thống các kiểu dữ liệu trong Java.

Ⅰ. Kiểu dữ liệu nguyên thủy (Primitive data types)

Là những kiểu dữ liệu cơ bản được cung cấp sẵn bởi Java. Chúng chiếm một lượng bộ nhớ cố định và không thể thay đổi kích thước. Bao gồm các kiểu dữ liệu sau:

Kiểu Dữ LiệuKích ThướcGiới Hạn Giá TrịVí Dụ
boolean1 bytetrue hoặc falsetrue, false
char2 byteMã ký tự Unicode (0 đến 65,535)'A', 'b', '@'
byte1 byte-128 đến 127100, -50, 0
short2 byte-32,768 đến 32,7671500, -2000
int4 byte-2,147,483,648 đến 2,147,483,6471000000, -5000
long8 byte-9,223,372,036,854,775,808 đến 9,223,372,036,854,775,80710000000000L, -5000000000L
float4 byte-3.4E38 đến 3.4E383.14f, -0.5f
double8 byte-1.7E308 đến 1.7E3083.141592653589793, -0.123456789

Giá trị mặc định của biến trong Java

Trong Java, bạn không nhất thiết phải gán giá trị cho biến ngay khi khai báo. Nếu bạn khai báo một biến nhưng không gán giá trị (khởi tạo), trình biên dịch sẽ tự động đặt một giá trị mặc định hợp lý cho biến đó.

Thông thường, giá trị mặc định sẽ là 0 hoặc null phụ thuộc vào kiểu dữ liệu của biến. Tuy nhiên, việc phụ thuộc vào giá trị mặc định này thường được coi là một cách lập trình không tốt.

Bảng dưới đây tóm tắt các giá trị mặc định cho các kiểu dữ liệu cơ bản:

Kiểu Dữ LiệuGiá Trị Mặc Định
byte0
short0
int0
long0L
float0.0f
double0.0d
char\u0000 (Ký tự trống)
String (hoặc bất kỳ đối tượng nào)null
booleanfalse

Lưu ý về biến cục bộ (local variable):

Biến cục bộ khác với trường (field). Trình biên dịch sẽ không tự động gán giá trị mặc định cho biến cục bộ chưa được khởi tạo.

Nếu bạn không thể khởi tạo biến cục bộ ngay khi khai báo, hãy nhớ gán giá trị cho biến đó trước khi sử dụng. Truy cập vào một biến cục bộ chưa được khởi tạo sẽ dẫn đến lỗi biên dịch.

Ⅱ. Kiểu dữ liệu phi nguyên thủy (Non-primitive data types)

Là những kiểu dữ liệu được xây dựng từ các kiểu dữ liệu nguyên thủy. Chúng có kích thước linh hoạt và có thể chứa các đối tượng (object) phức tạp. Bao gồm các kiểu dữ liệu sau:

↳ Classes: Bản thiết kế để tạo ra các đối tượng. Mỗi đối tượng là một instance của một class và có thể chứa các thuộc tính (property) và phương thức (method).

↳ Interfaces: Định nghĩa một hợp đồng (contract) mà các lớp khác phải tuân theo.

↳ Arrays: Mảng là một tập hợp các phần tử có cùng kiểu dữ liệu, được truy cập bằng chỉ số.

Ⅲ. Ép kiểu dữ liệu

Ép kiểu (type casting) trong Java là quá trình chuyển đổi giá trị từ một kiểu dữ liệu sang kiểu dữ liệu khác. Việc ép kiểu thường cần thiết khi bạn muốn thực hiện các phép toán hoặc gán giá trị giữa các biến có kiểu dữ liệu khác nhau. Có hai loại ép kiểu chính:

1. Ép kiểu ngầm định (Implicit Casting):

Xảy ra tự động khi trình biên dịch Java nhận ra rằng có thể chuyển đổi giá trị từ kiểu dữ liệu này sang kiểu dữ liệu khác một cách an toàn và không gây mất dữ liệu.

Thường xảy ra khi chuyển đổi từ kiểu dữ liệu nhỏ hơn sang kiểu dữ liệu lớn hơn.

Ví dụ

byte b = 10;
int i = b; // Ép kiểu ngầm định từ byte sang int

2. Ép kiểu tường minh (Explicit Casting):

Yêu cầu lập trình viên sử dụng toán tử ép kiểu để chuyển đổi giá trị. Thường xảy ra khi chuyển đổi từ kiểu dữ liệu lớn hơn sang kiểu dữ liệu nhỏ hơn hoặc khi cần kiểm soát rõ ràng việc chuyển đổi.

Có hai loại ép kiểu tường minh (Explicit Casting):

↳ Ép kiểu thu hẹp (Narrowing Casting): Chuyển đổi từ kiểu dữ liệu lớn hơn sang kiểu dữ liệu nhỏ hơn. Có thể dẫn đến mất dữ liệu nếu giá trị không nằm trong phạm vi cho phép của kiểu dữ liệu đích.

Ví dụ

int i = 100;
byte b = (byte) i; // Ép kiểu thu hẹp từ int sang byte (có thể dẫn đến mất dữ liệu)
Ép kiểu thu hẹp (Narrowing Casting) trong Java - minh họa
Ảnh mô tả ép kiểu thu hẹp (Narrowing Casting).

↳ Ép kiểu mở rộng (Widening Casting): Chuyển đổi từ kiểu dữ liệu nhỏ hơn sang kiểu dữ liệu lớn hơn. Không dẫn đến mất dữ liệu.

Ví dụ

byte b = 10;
int i = (int) b; // Ép kiểu mở rộng từ byte sang int
Ép kiểu mở rộng (Widening Casting) trong Java - minh họa
Ảnh mô tả ép kiểu mở rộng (Widening Casting).

Lưu ý:

Sử dụng ép kiểu ngầm định khi có thể vì nó đơn giản và hiệu quả hơn.

Sử dụng ép kiểu tường minh khi cần kiểm soát rõ ràng việc chuyển đổi hoặc khi ép kiểu thu hẹp.

Cần cẩn thận khi ép kiểu thu hẹp vì có thể dẫn đến mất dữ liệu.

Câu Nói Truyền Cảm Hứng

“Bắt đầu ở đâu không quan trọng, quan trọng là bạn sẵn sàng bắt đầu.” – W. Clement Stone

Không Gian Tích Cực

“Chúc bạn luôn giữ vững niềm tin và sức mạnh để vượt qua mọi thử thách trong cuộc sống.”