Chuyển Đổi Kiểu Dữ Liệu
1. Chuyển đổi tự động (ẩn)
Khi gán giá trị từ kiểu dữ liệu có phạm vi nhỏ hơn sang kiểu lớn hơn, Java thực hiện chuyển đổi tự động mà không cần can thiệp.
Quy tắc: byte → short → int → long → float → double
Lưu ý đặc biệt: Trong biểu thức tính toán, các kiểu byte, short, char luôn được thăng cấp thành int trước khi xử lý.
public class DataTypeConversion {
public static void main(String[] args) {
long bigNumber = 50; // int → long: OK
double precise = 7.8F; // float → double: OK
float largeFloat = 100L; // long → float: OK (float có phạm vi lớn hơn long về giá trị)
System.out.println(largeFloat); // Xuất: 100.0
}
}
2. Chuyển đổi ép kiểu (hiển)
Khi cần gán giá trị từ kiểu lớn sang kiểu nhỏ, phải dùng cú pháp ép kiểu. Tuy nhiên, điều này tiềm ẩn rủi ro mất mát độ chính xác hoặc tràn số.
Cú pháp: (kiểu_mới) biểu_thức
public class ExplicitCast {
public static void main(String[] args) {
int fromLong = (int) 2500000000L; // Tràn số: kết quả không còn chính xác
System.out.println(fromLong); // Có thể in ra số âm do tràn
int fromDouble = (int) 9.99; // Mất phần thập phân, chỉ lấy phần nguyên
System.out.println(fromDouble); // In: 9
byte a = 20, b = 30;
int sum = a + b; // byte + byte → int
System.out.println(sum); // In: 50
char ch = 'C';
System.out.println(ch + 1); // Ký tự được chuyển sang mã ASCII: 67 + 1 = 68
}
}
- Không nên lạm dụng ép kiểu – chỉ dùng khi chắc chắn giá trị nằm trong phạm vi.
booleankhông thể chuyển đổi sang bất kỳ kiểu nào khác.
Toán Tử
1. Toán tử số học
++: tăng 1--: giảm 1%: chia lấy dư
2. Toán tử quan hệ
So sánh hai giá trị: ==, !=, <, >, <=, >=. Kết quả trả về kiểu boolean.
3. Toán tử logic
Xử lý biểu thức boolean: && (AND), || (OR), ! (NOT).
4. Toán tử ba ngôi
Cấu trúc: điều_kiện ? giá_trị_nếu_true : giá_trị_nếu_false
int result = (5 > 3) ? 100 : 200; // result = 100
5. Bảng ký tự
- ASCII: Mã hóa 128 ký tự cơ bản.
- Unicode: Hỗ trợ đa ngôn ngữ, mở rộng từ ASCII.
Câu Lệnh Điều Khiển
1. Cấu trúc tuần tự
Các lệnh được thực thi lần lượt từ trên xuống dưới theo thứ tự viết trong code.
2. Câu lệnh rẽ nhánh
Dùng để kiểm tra điều kiện và thực thi khối lệnh tương ứng.
if (score >= 90) {
grade = 'A';
} else if (score >= 80) {
grade = 'B';
} else if (score >= 70) {
grade = 'C';
} else {
grade = 'D';
}
3. Câu lệnh lựa chọn (switch)
Thích hợp khi so sánh một biểu thức với nhiều hằng số.
switch (dayOfWeek) {
case 1:
System.out.println("Thứ Hai");
break;
case 2:
System.out.println("Thứ Ba");
break;
default:
System.out.println("Ngày không hợp lệ");
break;
}
Lưu ý: Thiếu break sẽ gây hiện tượng "rơi xuyên" (fall-through) – tất cả các nhánh phía sau đều được thực thi cho đến khi gặp break hoặc kết thúc khối.
4. Câu lệnh lặp
Vòng lặp for:
for (int i = 0; i < 5; i++) {
System.out.println("Lần lặp: " + i);
}
Vòng lặp while:
int count = 0;
while (count < 5) {
System.out.println(count);
count++;
}
Vòng lặp do-while:
int input;
do {
System.out.print("Nhập số dương: ");
input = scanner.nextInt();
} while (input <= 0);
Khác biệt: do-while luôn thực thi ít nhất một lần.
5. Từ khóa điều khiển
break: thoát khỏi vòng lặp hoặc khốiswitch.continue: bỏ qua phần còn lại của vòng lặp hiện tại, chuyển sang lần lặp tiếp theo.
Mở rộng
Vòng lặp vô hạn: Vòng lặp không có điều kiện dừng, ví dụ: while(true).
Vòng lặp lồng nhau: Một vòng lặp nằm bên trong thân của vòng lặp khác. Tổng số lần lặp bằng tích số lần lặp của từng vòng.
for (int i = 1; i <= 3; i++) {
for (int j = 1; j <= 2; j++) {
System.out.println("i=" + i + ", j=" + j);
}
}