0

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

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

image.png

*Ả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:

1. boolean

Kích thước: Thường được mô tả là 1 byte trong các bảng giới thiệu, nhưng Java không quy định kích thước lưu trữ cố định cho biến boolean. Giá trị: true hoặc false. Ví dụ: true, false.

2. char

Kích thước: 2 byte (16 bit). Giới hạn giá trị: Từ 0 đến 65,535, tương ứng với các đơn vị mã UTF-16. Ví dụ: 'A', 'b', '@'.

3. byte

Kích thước: 1 byte (8 bit). Giới hạn giá trị: -128 đến 127. Ví dụ: 100, -50, 0.

4. short

Kích thước: 2 byte (16 bit). Giới hạn giá trị: -32,768 đến 32,767. Ví dụ: 1500, -2000.

5. int

Kích thước: 4 byte (32 bit). Giới hạn giá trị: -2,147,483,648 đến 2,147,483,647. Ví dụ: 1000000, -5000.

6. long

Kích thước: 8 byte (64 bit). Giới hạn giá trị: -9,223,372,036,854,775,808 đến 9,223,372,036,854,775,807. Ví dụ: 10000000000L, -5000000000L.

7. float

Kích thước: 4 byte (32 bit). Phạm vi: Xấp xỉ từ -3.4 × 10³⁸ đến 3.4 × 10³⁸ đối với các giá trị hữu hạn. Ví dụ: 3.14f, -0.5f.

8. double

Kích thước: 8 byte (64 bit). Phạm vi: Xấp xỉ từ -1.7 × 10³⁰⁸ đến 1.7 × 10³⁰⁸ đối với các giá trị hữu hạn. Ví dụ: 3.141592653589793, -0.123456789.

Ghi nhớ nhanh: byte, short, int, long: lưu trữ số nguyên. float, double: lưu trữ số thực dấu phẩy động. char: lưu trữ một đơn vị mã UTF-16. boolean: biểu diễn giá trị đúng hoặc sai.

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:

1. boolean

Kích thước: Thường được mô tả là 1 byte trong một số tài liệu nhập môn, nhưng Java không quy định kích thước lưu trữ cố định cho boolean. Giá trị: true hoặc false. Ví dụ: true, false.

2. char

Kích thước: 2 byte (16 bit). Giới hạn giá trị: 0 đến 65,535 (tương ứng \u0000 đến \uFFFF). Ví dụ: 'A', 'b', '@'.

3. byte

Kích thước: 1 byte (8 bit). Giới hạn giá trị: -128 đến 127. Ví dụ: 100, -50, 0.

4. short

Kích thước: 2 byte (16 bit). Giới hạn giá trị: -32,768 đến 32,767. Ví dụ: 1500, -2000.

5. int

Kích thước: 4 byte (32 bit). Giới hạn giá trị: -2,147,483,648 đến 2,147,483,647. Ví dụ: 1000000, -5000.

6. long

Kích thước: 8 byte (64 bit). Giới hạn giá trị: -9,223,372,036,854,775,808 đến 9,223,372,036,854,775,807. Ví dụ: 10000000000L, -5000000000L.

7. float

Kích thước: 4 byte (32 bit). Phạm vi giá trị: Xấp xỉ từ -3.4028235E38 đến 3.4028235E38. Ví dụ: 3.14f, -0.5f.

8. double

Kích thước: 8 byte (64 bit). Phạm vi giá trị: Xấp xỉ từ -1.7976931348623157E308 đến 1.7976931348623157E308. Ví dụ: 3.141592653589793, -0.123456789.

Ghi nhớ:

Java có 8 kiểu dữ liệu nguyên thủy: boolean, char, byte, short, int, long, float và double. byte, short, int, long dùng để biểu diễn số nguyên.

float và double dùng để biểu diễn số thực dấu phẩy động.

char lưu một đơn vị mã UTF-16, không phải lúc nào cũng tương ứng với một ký tự Unicode hoàn chỉnh.

Khi khai báo giá trị long, bạn có thể thêm hậu tố L; với float, hãy thêm hậu tố f, ví dụ 10000000000L và 3.14f.

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)

image.png

Ả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

image.png

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


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí