Đoạn mã sau sai chỗ nào?
public class Question {
public static void main(String[] args) {
Boolean b = new Boolean("TRUE");
if (b) {
for (Integer i = 0; i < 10; i++) {
System.out.println(i);
}
}
}
}
Đoạn mã sau sai chỗ nào?
public class Question {
public static void main(String[] args) {
Boolean b = new Boolean("TRUE");
if (b) {
for (Integer i = 0; i < 10; i++) {
System.out.println(i);
}
}
}
}
Trả lời:
Đáp án đúng: D
Đoạn mã trên có hai lỗi:
1. **Lỗi 1:** Trong Java, khi sử dụng `Boolean` (đối tượng) trong câu lệnh `if`, Java sẽ tự động unboxing (chuyển đổi từ `Boolean` về `boolean`). Tuy nhiên, giá trị của `Boolean b` được khởi tạo bằng chuỗi "TRUE". Trong Java, `new Boolean(String)` chỉ trả về `true` nếu chuỗi truyền vào (không phân biệt hoa thường) là "true". Nếu không, nó sẽ trả về `false`. Như vậy, trong trường hợp này, `b` sẽ có giá trị `false`, và khối mã trong `if` sẽ không được thực thi.
2. **Lỗi 2:** Tương tự như trên, khi sử dụng `Integer` trong vòng lặp `for`, Java cũng thực hiện unboxing để chuyển đổi `Integer` về `int`. Điều này hoàn toàn hợp lệ và không gây ra lỗi.
Vì vậy, lỗi chính nằm ở việc sử dụng `Boolean` trong câu lệnh `if` và giá trị khởi tạo của nó, dẫn đến điều kiện `if` luôn sai. Câu lệnh `for` sử dụng `Integer` không gây ra lỗi.
Do đó, đáp án đúng nhất là B, vì lỗi nằm ở cách sử dụng `Boolean` trong câu lệnh `if` và giá trị khởi tạo của nó.
Cụ thể:
- `Boolean b = new Boolean("TRUE");` sẽ gán `false` cho `b` vì chuỗi truyền vào không phải là "true" (chú ý phân biệt hoa thường).
- `if (b)` sẽ tương đương với `if (false)`, dẫn đến khối mã bên trong `if` không được thực thi.
Câu C sai vì việc sử dụng `Integer` trong vòng lặp `for` là hợp lệ do unboxing.
Câu D sai vì chỉ có câu B đúng, còn câu C sai.





