Biến và kiểu dữ liệu
Nội dung bài · 6 mục
Chương trình bán hàng cần nhớ tên sản phẩm, giá, số lượng trong kho. Để lưu những giá trị đó, bạn dùng biến. Mỗi biến có một kiểu, và chọn đúng kiểu là việc đầu tiên phải làm.
Khái niệm
📦 Biến (variable): một cái tên dùng để lưu và đọc lại một giá trị trong chương trình.
🏷️ Kiểu dữ liệu (data type): loại giá trị mà biến được phép chứa, ví dụ số nguyên hay chuỗi.
Java kiểm tra kiểu ngay lúc compile. Biến đã khai báo kiểu int thì không
gán chuỗi vào được.
Ví dụ
void main() {
String name = "Bút bi";
int quantity = 120;
long price = 5000;
boolean inStock = true;
System.out.println(name);
System.out.println(price);
}Khai báo biến theo mẫu kiểu tên = giá trị;. Các kiểu dùng nhiều nhất:
| Kiểu | Chứa gì | Ví dụ |
|---|---|---|
int |
số nguyên, tới khoảng 2,1 tỉ | 120 |
long |
số nguyên lớn, dùng cho tiền (đồng) | 5000 |
double |
số thực, tính nhanh nhưng có sai số nhỏ | 1.75 |
boolean |
đúng hoặc sai | true, false |
String |
chuỗi chữ | "Bút bi" |
BigDecimal |
số thập phân chính xác | new BigDecimal("0.1") |
- Tiền Việt không có phần lẻ, nên khoá học lưu giá bằng
long, tính theo đồng. StringvàBigDecimalviết hoa chữ cái đầu, các kiểu còn lại viết thường.- Tên biến viết kiểu camelCase: chữ đầu thường, các từ sau viết hoa
(
inStock,unitPrice).
Từ khoá var
Khi giá trị bên phải đã rõ kiểu, bạn có thể viết var thay cho tên kiểu:
void main() {
var quantity = 120; // int
var price = 5000L; // long
var name = "Bút bi"; // String
}var không phải kiểu "gì cũng được". Compiler tự suy ra kiểu từ giá trị, và
kiểu này không đổi về sau.
Thử ngay
Dán vào Main.java rồi chạy java Main.java:
void main() {
double a = 0.1;
double b = 0.2;
System.out.println(a + b);
BigDecimal c = new BigDecimal("0.1");
BigDecimal d = new BigDecimal("0.2");
System.out.println(c.add(d));
}Đoán trước khi chạy: hai dòng in ra có giống nhau không?
Xem kết quả
0.30000000000000004
0.3Không giống. double lưu số theo hệ nhị phân nên có sai số nhỏ. BigDecimal
lưu chính xác số thập phân, nhưng cộng bằng add chứ không bằng +.
Tiền đồng đã có long, nên BigDecimal chỉ dùng khi cần số lẻ chính xác,
như giá USD hay tỉ giá.
Lỗi hay gặp
Gán sai kiểu. "5" là chuỗi, không phải số.
// SAI — lỗi compile: không gán chuỗi cho int
void main() {
int quantity = "5";
}// ĐÚNG
void main() {
int quantity = 5;
}Quên chữ L với số lớn. Số nguyên viết trong code mặc định là int, mà
int chỉ chứa tới khoảng 2,1 tỉ.
// SAI — lỗi compile: integer number too large
void main() {
long revenue = 3000000000;
}// ĐÚNG
void main() {
long revenue = 3000000000L;
}Tóm tắt
- Khai báo biến:
kiểu tên = giá trị;. intcho số nguyên,longcho tiền,booleancho đúng/sai,Stringcho chữ.varcho compiler tự suy ra kiểu, nhưng kiểu vẫn cố định.- Tiền dùng
longtính bằng đồng, không dùngdouble. Cần số lẻ chính xác thì dùngBigDecimal.
Tự kiểm tra
0/3 câuBạn cần lưu tổng tiền (VND) của một hoá đơn. Kiểu nào phù hợp nhất?
Sau dòng var count = 10; thì dòng count = "mười"; có chạy được không?
Biến lưu trạng thái "đơn hàng đã thanh toán hay chưa" nên dùng kiểu gì?