JavaScript is required

Cho đoạn lệnh sau đây. Cho biết kết quả khi thực thi chương trình
if ("String".toString() == "String") System.out.println("Equal");
else System.out.println("Not Equal");

A.

Equal

B.

Not Equal

C.

Lỗi Biên Dịch

D.

Lỗi Thực Thi

Trả lời:

Đáp án đúng: A


Trong Java, khi so sánh hai đối tượng String bằng toán tử `==`, ta đang so sánh tham chiếu (địa chỉ) của chúng trong bộ nhớ, chứ không phải nội dung của chuỗi. Trong đoạn code này, `"String".toString()` trả về một tham chiếu đến một đối tượng String, và `"String"` cũng là một tham chiếu đến một đối tượng String khác (có thể là một String literal trong string pool hoặc một đối tượng mới). Mặc dù cả hai đều có nội dung là "String", nhưng chúng có thể không phải là cùng một đối tượng trong bộ nhớ. Do đó, phép so sánh `==` có thể trả về `false`. Tuy nhiên, trong nhiều trường hợp, trình biên dịch có thể tối ưu hóa và sử dụng lại các String literal, dẫn đến việc hai tham chiếu này trỏ đến cùng một đối tượng. Điều này làm cho kết quả của phép so sánh `==` không nhất quán và phụ thuộc vào môi trường thực thi. Trong trường hợp này, do không có đảm bảo rằng hai chuỗi này là cùng một đối tượng, nên kết quả so sánh bằng `==` có thể trả về `false`, dẫn đến việc in ra "Not Equal".

Câu hỏi liên quan