Toán tử và ép kiểu
Tính tổng tiền, so sánh tồn kho, đổi chuỗi người dùng nhập thành số: việc nào cũng cần toán tử và ép kiểu. Bài này gom những toán tử dùng hằng ngày, kèm hai cái bẫy mà người mới hay rơi vào.
Khái niệm
🧮 Toán tử (operator): ký hiệu thực hiện một phép tính trên giá trị, như +, >, &&.
🔄 Ép kiểu (casting): chuyển một giá trị từ kiểu này sang kiểu khác, như từ double sang int.
Ví dụ
void main() {
int quantity = 7;
long price = 5000;
long total = price * quantity; // 35000
boolean bigOrder = total > 30000; // true
boolean freeShip = bigOrder && quantity >= 5;
System.out.println(total);
System.out.println(freeShip);
}Các toán tử hay dùng:
| Nhóm | Toán tử | Ý nghĩa |
|---|---|---|
| Số học | + - * / % |
cộng, trừ, nhân, chia, chia lấy dư |
| So sánh | == != > < >= <= |
kết quả là boolean |
| Logic | && || ! |
và, hoặc, phủ định |
%cho phần dư:7 % 2bằng1.==là so sánh,=là gán. Hai dấu này khác nhau hoàn toàn.+với chuỗi là nối chuỗi:"Tổng: " + total.
Ép kiểu
Khi không mất dữ liệu, Java tự chuyển kiểu, ví dụ từ int sang double.
Khi có thể mất dữ liệu, bạn phải ghi rõ kiểu đích trong ngoặc:
void main() {
double rating = 4.8;
int stars = (int) rating; // 4, phần lẻ bị cắt
String input = "12";
int quantity = Integer.parseInt(input);
}(int)cắt bỏ phần lẻ, không làm tròn.- Chuỗi thì không ép bằng ngoặc được, phải dùng
Integer.parseInt,Long.parseLong.
Thử ngay
Dán vào Main.java rồi chạy java Main.java:
void main() {
System.out.println(7 / 2);
System.out.println(7 / 2.0);
System.out.println(7 % 2);
System.out.println((int) 3.9);
}Đoán trước khi chạy: dòng đầu in ra 3.5 hay số khác?
Xem kết quả
3
3.5
1
37 / 2 là phép chia hai số nguyên nên kết quả cũng là số nguyên, phần lẻ bị
bỏ. Chỉ cần một vế là số thực (2.0) thì kết quả mới là 3.5.
Lỗi hay gặp
Chia nguyên ngoài ý muốn. Tính trung bình mà cả hai vế đều là int.
// SAI — ra 3.0 chứ không phải 3.5
void main() {
int totalStars = 7;
int reviews = 2;
double average = totalStars / reviews;
}// ĐÚNG — ép một vế sang double trước khi chia
void main() {
int totalStars = 7;
int reviews = 2;
double average = (double) totalStars / reviews;
}Nối chuỗi với phép cộng. Java đọc từ trái sang phải. Gặp chuỗi trước thì
mọi dấu + phía sau đều thành nối chuỗi.
// SAI — in ra "Tổng: 12"
void main() {
System.out.println("Tổng: " + 1 + 2);
}// ĐÚNG — in ra "Tổng: 3"
void main() {
System.out.println("Tổng: " + (1 + 2));
}Tóm tắt
/giữa hai số nguyên cho số nguyên. Cần phần lẻ thì ép một vế sangdouble.==để so sánh,=để gán.(int)cắt phần lẻ, không làm tròn.- Chuỗi sang số dùng
Integer.parseInt,Long.parseLong.
Tự kiểm tra
0/3 câuint boxes = 10; int perBox = 4; System.out.println(boxes / perBox); In ra gì?
Người dùng nhập "25" vào biến String input. Cách nào đổi nó thành số int?
Biểu thức nào đúng khi đơn hàng trên 500000 VÀ khách là thành viên?