switch case
1. Câu lệnh switch truyền thống
Phần tiêu đề “1. Câu lệnh switch truyền thống”int day = 3;String name;
switch (day) { case 1: name = "Thứ Hai"; break; case 2: name = "Thứ Ba"; break; case 3: name = "Thứ Tư"; break; default: name = "Không xác định"; break;}
System.out.println(name); // Thứ Tưswitch truyền thống so sánh giá trị của biểu thức với từng case; break dùng để thoát khỏi switch sau khi tìm thấy nhánh khớp. Nếu thiếu break, chương trình sẽ “rơi tiếp” (fall-through) xuống case bên dưới - xem chi tiết lỗi thường gặp này ở trang “Switch fall-through” trong mục What the Java!.
2. switch trên String và enum
Phần tiêu đề “2. switch trên String và enum”Ngoài kiểu số nguyên, switch còn hoạt động với String và enum:
String fruit = "cam";
switch (fruit) { case "táo": System.out.println("Quả táo"); break; case "cam": System.out.println("Quả cam"); break; default: System.out.println("Không rõ loại quả");}3. Switch expression hiện đại (Java 14+)
Phần tiêu đề “3. Switch expression hiện đại (Java 14+)”Từ Java 14, switch có thể dùng như một biểu thức (trả về giá trị) với cú pháp mũi tên ->, không cần break và không bị fall-through:
int day = 3;
String name = switch (day) { case 1 -> "Thứ Hai"; case 2 -> "Thứ Ba"; case 3 -> "Thứ Tư"; default -> "Không xác định";};
System.out.println(name); // Thứ TưCó thể gộp nhiều nhãn (label) trên cùng một dòng:
String dayType = switch (day) { case 1, 2, 3, 4, 5 -> "Ngày trong tuần"; case 6, 7 -> "Cuối tuần"; default -> "Không hợp lệ";};Khi một nhánh cần nhiều dòng lệnh, dùng khối {} cùng từ khóa yield để trả về giá trị:
int score = 82;
String rank = switch (score / 10) { case 10, 9 -> "Xuất sắc"; case 8 -> { System.out.println("Gần đạt mức xuất sắc!"); yield "Giỏi"; } default -> "Cần cố gắng thêm";};4. Pattern matching cho switch (Java 21+)
Phần tiêu đề “4. Pattern matching cho switch (Java 21+)”Từ Java 21, switch còn hỗ trợ pattern matching - kiểm tra và ép kiểu (cast) đối tượng ngay trong case, giúp code ngắn gọn hơn nhiều so với chuỗi if instanceof lồng nhau:
Object obj = "Hello";
String result = switch (obj) { case Integer i -> "Số nguyên: " + i; case String s -> "Chuỗi có độ dài " + s.length(); default -> "Không xác định";};Đây là tính năng nâng cao, thường gặp trong code Java hiện đại - sẽ được tìm hiểu kỹ hơn ở các bài nâng cao sau.
Tổng kết
Phần tiêu đề “Tổng kết”switchtruyền thống dùngcase/break, dễ quênbreakgây fall-through- Switch expression (
->, Java 14+) trả về giá trị trực tiếp, an toàn hơn vì không fall-through yielddùng để trả giá trị từ một khối{}nhiều dòng trong switch expression- Pattern matching cho switch (Java 21+) cho phép kiểm tra kiểu ngay trong
case