Những kiểu dữ liệu primitive là những kiểu dữ liệu đơn giản nhất trong mọi ngôn ngữ lập trình nói chung và Java nói riêng. Trong Java chúng ta có 8 kiểu dữ liệu primitive như sau:
- char
- byte
- short
- int
- long
- float
- double
- boolean
Những biến được định nghĩa với kiểu dữ liệu primitive thì được gọi là biến primitive. Trong bài viết này, chúng ta sẽ cùng tìm hiểu các kiểu dữ liệu primitive trong Java, làm thế nào để tạo và gán giá trị ban đầu cho các biến primitive này các bạn nhé!
Dưới đây là bảng tóm tắt các primitive type và khoảng giá trị của chúng:
| Primitive type | Kích thước | Khoảng giá trị |
|---|---|---|
byte |
8-bit | -128 to 127 |
short |
16-bit | -32,768 to 32,767 |
int |
32-bit | -2³¹ to 2³¹−1 |
long |
64-bit | -2⁶³ to 2⁶³−1 |
char |
16-bit | '\u0000' to '\uffff' |
float |
32-bit | IEEE 754 binary32 |
double |
64-bit | IEEE 754 binary64 |
boolean |
— | true / false |
char
Cú pháp để định nghĩa một biến có kiểu dữ liệu là char như sau:
|
1 |
char <ten_bien> = 'gia_tri_cua_bien'; |
Ví dụ:
|
1 |
char a = 'A'; |
Như các bạn thấy, giá trị của biến char sẽ được đặt trong một dấu nháy đơn, nếu các bạn đặt nó trong một dấu nháy kép như khai báo biến cho một String thì sẽ bị lỗi compile ngay.

Một char là một số nguyên không dấu (một số nguyên không có dấu “+” hoặc “-” theo sau, còn có thể gọi là số dương), 16 bit, biểu diễn cho một UTF-16 code unit của bảng mã Unicode. Giá trị của nó được biểu diễn ở dạng Unicode trong khoảng giá trị từ ” \u0000″ (0) đến “\uffff” (65535). Vì một số code point của Unicode cần 2 code unit nên một char không thể sử dụng để định nghĩa cho mọi ký tự Unicode nha các bạn!
Bên trong Java, biến char được lưu trữ bằng một số dương từ 0 đến 65535.
Trong ví dụ trên, chúng ta đã khai báo biến a với giá trị là A. Ký tự “A” này có code point trong bảng mã Unicode là U+0041, có giá trị sẽ là số 65, tương tự như trong bảng mã ASCII (American Standard Code for Information Interchange). Do đó một cách khác để khai báo biến char trong Java mà chúng ta có thể sử dụng đó là:
|
1 |
char a = 65; |
Khi chạy đoạn code trên:
|
1 2 3 4 5 6 7 8 9 |
package com.huongdanjava; public class Example { public static void main(String[] args) { char a = 65; System.out.println(a); } } |
Kết quả sẽ là A.
Các bạn có thể tham khảo thêm bảng mã ASCII dưới đây:

Như mình đã nói ở trên giá trị của biến char là một số dương, nên nếu bạn gán cho nó một giá trị âm thì nó sẽ bị lỗi compile ngay;

Nhưng nếu trong trường hợp bạn khai báo biến char với số âm bằng cách ép kiểu thì vẫn được, không bị lỗi compile:

Nhưng khi chạy, kết quả sẽ luôn là

Vì lúc này -65 ở 32 bit được cast về 16 bit, sẽ là code point số 65471 (/uFFBF). Code point này chưa được gán cho ký tự nào cả nên Java sẽ in ra một ký tự thay thế, ở đây là ký tự “?”, đó các bạn.
byte
byte là kiểu dữ liệu có kích thước 8 bits với khoảng giá trị đi từ -128 đến 127.
Ví dụ khai báo biến byte như sau:
|
1 |
byte a = 83; |
short
short thì có kích thước lớn hơn byte, 16bits, với khoảng giá trị cũng lớn hơn byte đi từ -32.768 đến 32.767.
Ví dụ khai báo biến short như sau:
|
1 |
short a = 12345; |
int
int có kích thước 32 bits, trong khoảng giá trị từ -2.147.483.648 đến 2.147.483.647.
Khai báo biến int như sau:
|
1 |
int a = 100; |
long
long là kiểu dữ liệu 64 bits, khoảng giá trị của nó từ –9.223.372.036.854.775.808 đến 9.223.372.036.854.775.807. Một khoảng giá trị rất lớn phải không các bạn, thật sự chúng ta cũng không cần phải nhớ số này để làm gì. 😀
Khai báo biến long như sau:
|
1 |
long a = 234; |
Một số lưu ý cho các biến byte, short, int, long
– Khi khai báo một biến instance hoặc biến static, nếu các bạn không gán giá trị cho nó thì giá trị mặc định của nó sẽ là 0.
– Kiểu dữ liệu mặc định của các số nguyên là int. Có nghĩa khi bạn khai báo như sau:
|
1 |
long a = 1000; |
thì số 1000 ở đây là kiểu int. Nhưng cơ chế tự động chuyển đổi từ kiểu int qua kiểu long của Java cho phép chúng ta khai báo như vậy. Để chỉ định số 1000 là kiểu long, các bạn có thể thêm chữ L hoặc l sau số này và khai báo như sau:
|
1 |
long a = 1000L; |
– Java cho phép tự động chuyển đổi biến giữa các kiểu dữ liệu primitive như sau (có cả float và double nữa nha các bạn):
- byte qua short, int, long, float, hoặc double.
- short qua int, long, float, hoặc double.
- char qua int, long, float, hoặc double.
- int qua long, float, hoặc double.
- long qua float hoặc double.
- float qua double.
Trong một số trường hợp thì việc chuyển đổi này sẽ không đảm bảo là giá trị sau chuyển đổi sẽ giữ nguyên nha các bạn, ví dụ như trường hợp này:
|
1 2 3 4 |
int i = 16_777_217; float f = i; System.out.println((int) f); |
Chạy ví dụ thì các bạn sẽ thấy giá trị in ra chỉ là 16_777_216.
– Khi các bạn tính toán các số nguyên kiểu byte hoặc short thì đầu tiên, Java sẽ tự động chuyển đổi các biến này lên thành kiểu int trước, sau đó mới thực hiện việc tính toán. Ví dụ, đoạn code sau của chúng ta sẽ bị lỗi compile:

– Java còn cho phép chúng ta biểu diễn các biến này trong hệ nhị phân, hệ thập phân, hệ 8 và hệ 16.
- Hệ nhị phân thì biến được khai báo bắt đầu bằng 0b hoặc 0B.
Ví dụ:
|
1 |
int b = 0b100001011; |
- Hệ thập phân là những số chúng ta dùng hàng ngày thì được biểu diễn như bình thường.
Ví dụ;
|
1 |
int b = 129; |
- Hệ 8 thì biến được khai báo bắt đầu bằng 0.
Ví dụ:
|
1 |
int b = 0235; |
- Hệ 16 thì biến được khai báo bắt đầu bằng 0x hoặc 0X.
Ví dụ:
|
1 |
int b = 0xA; |
– Từ Java 7, khi khai báo các biến có giá trị lớn, chúng ta có thể sử dụng dấu gạch dưới giữa các số theo ý của chúng ta để số có thể dễ đọc hơn.
Ví dụ:

Các bạn có thể sử dụng dấu gạch dưới để khai báo biến từ Java 7 với những nguyên tắc sau:
- Các bạn không thể khai báo dấu gạch dưới ở đầu hoặc ở cuối của một số.
- Các bạn không thể đặt dấu gạch dưới ngay sau 0b, 0B, 0x, 0X trong khai báo số nhị phân và số trong hệ 16.
- Các bạn có thể đặt dấu gạch dưới sau số 0 trong khai báo số trong hệ 8.
- Các bạn không thể đặt dấu gạch dưới trước chữ L hay tương tự những chữ khác (chữ L đánh dấu giá trị của biến ở kiểu long).
Bài viết này, mình chỉ giới thiệu với các bạn năm kiểu dữ liệu đầu tiên, phần tiếp theo mình sẽ giới thiệu với các bạn về float, double và boolean.
