Các loại kiểu dữ liệu

Trong java có hai loại kiểu dữ liệu: kiểu dữ liệu nguyên thủy (hay còn gọi là primitive) và kiểu dữ liệu tham chiếu (non-primitive)

Kiểu dữ liệu nguyên thủy

  • Một kiểu dữ liệu nguyên thủy trực tiếp giữ một giá trị trong bộ nhớ. Ví dụ, một số hoặc một ký tự
  • Các kiểu dữ liệu nguyên thủy không phải là đối tượng, cũng như không có tham chiếu đến đối tượng
Kiểu dữ liệuMô tảGiá trị mặc địnhKích thước
booleangiá trị nhị phân của true hoặc falsefalse1 bit
charbất kì kí tự unicode nào\u0000 (kí tự rỗng)kí tự unicode 16 bit
bytegiá trị từ -128 tới 1270giá trị có 8 bit
shortgiá trị từ -32768 đến 327670giá trị có 16 bit
intGiá trị từ
-231 đến 2 31 -1
0giá trị có 32 bit
longGiá trị từ
-2 63 đến 2 63 -1
0giá trị có 64 bit
floatIEEE 7540,0giá trị dấu phẩy động 32 bit
doubleIEEE 7540,0giá trị dấu phẩy động 64 bit
Bảng mô tả các kiểu dữ liệu nguyên thủy

Kiểu dữ liệu tham chiếu (non-primitive)

Một kiểu dữ liệu tham chiếu giữ tham chiếu đến một đối tượng trong bộ nhớ. Sử dụng tham chiếu được lưu trữ trong biến, ta có thể truy cập các thuộc tính và phương thức của đối tượng được tham chiếu.

Nhiều biến có thể tham chiếu đến cùng một đối tượng thế nên chúng ta có thể gán tham chiếu của một đối tượng được lưu trữ trong một biến tham chiếu cho một biến tham chiếu khác, kiểu như bên dưới:

String strA;
String strB;

// Gán tham chiếu strA cho đối tượng String có giá trị là "Hello"
strA = new String( "Hello" );

// Gán tham chiếu strB bằng strA
strB = strA;

System.out.println( strA );         //Hello
System.out.println( strB );         //Hello

Có một hằng số tham chiếu là null được gán cho bất kì biến tham chiếu nào, nếu null được gán cho một biến tham chiếu thì đồng nghĩa là biến đó không được tham chiếu đến đối tượng nào trong bộ nhớ.

Các lớp Wrapper Classes

Lớp Wrapper Classes là một lớp có đối tượng bao bọc hoặc chứa kiểu dữ liệu nguyên thủy . Nói cách khác, chúng ta có thể bọc một giá trị nguyên thủy vào một lớp wrapper.

Kiểu nguyên thủyWrapper Classes
booleanBoolean
charChar
byteByte
shortShort
intInt
longLong
floatFloat
doubleDouble
Các lớp Wrapper Classes tương ứng kiểu dữ liệu nguyên thủy

Sự khác biệt giữa kiểu nguyên thủy và không nguyên thủy

  • kiểu nguyên thủy lưu trữ trực tiếp các giá trị, kiểu tham chiếu lưu trữ các biến tham chiếu đến đối tượng trong bộ nhớ
  • có 8 kiểu dữ liệu nguyên thủy cố định, trong java thì mỗi lớp là một kiểu dữ liệu bao gồm wrapper classes.

Sử dụng kiểu dữ liệu nào để đạt hiệu quả nhất?

  • sử dụng biến nguyên thủy để khai báo cục bộ: trong hàm, trong vòng lặp, kết quả trung gian
  • sử dụng các quy ước đặt tên biến theo chuẩn coding convention ở bài trước
  • khi dữ liệu được chuyển đổi giữa các lớp hoặc phương thức, tốt hơn nên sử dụng các đối tượng vì chỉ có tham chiếu của chúng được sao chép (clone) và không có chi phí bộ nhớ nào
  • khi xử lý các Collections nên sử dụng đối tượng
  • khi gửi dữ liệu qua mạng, nên truyền kiểu dữ liệu đối tượng và cho nó implement interface Serializable
  • sử dụng kích thước dữ liệu thích hợp, kiểu như dùng int để lưu biến kiểu boolean sẽ không hợp lý
  • từ Java 1.7 trở lên thì sử dụng dấu gạch dưới để biểu thị số làm nó dễ đọc hơn (ví dụ: 100_000_000)

Xem thêm các bài viết liên quan dưới đây: