JavaScript is required

Đ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);
}
}
}
}

A.

(1) Đoạn mã không có lỗi

B.

(2) Điều kiện của câu lệnh if phải có kiểu boolean thay vì Boolean

C.

(3) Chỉ số của câu lệnh for là int thay vì Integer

D.
Câu (2) và (3) đúng
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.

Câu hỏi liên quan