Giải thích cho điều này bị ẩn trong JLS. Nó tuyên bố rằng ==
là numerical operator. Nếu bạn đọc văn bản và làm theo một số liên kết, bạn có thể tìm ra rằng char
được chuyển đổi thành int
. Nó không bao giờ nói một cách rõ ràng rằng điều này cũng sẽ xảy ra nếu cả hai toán hạng là char
nhưng nó says
Widening primitive conversion (§5.1.2) is applied to convert either or both operands as specified by the following rules:
* If either operand is of type double, the other is converted to double.
* Otherwise, if either operand is of type float, the other is converted to float.
* Otherwise, if either operand is of type long, the other is converted to long.
* Otherwise, both operands are converted to type int.
Tôi nghĩ người cuối cùng ngầm nghĩa là char
luôn chuyển đổi. Cũng trong số another section nó cho biết "If either operand is not an int, it is first widened to type int by numeric promotion."
.
Cảnh báo bạn đang nhận có thể rất nghiêm ngặt, nhưng có vẻ như là chính xác.
Nguồn
2013-10-22 14:40:14
Không xảy ra trong Eclipse, có thể triển khai sai trong IntelliJ? Hoặc mức độ cảnh báo được đặt rất cao trong IDE của bạn? –
Với ý tưởng 13 nó không tạo ra bất kỳ cảnh báo nào. – Admit
Bạn nên bật "Kiểm tra số phát hành/Chuyển đổi số ngầm định". Tuy nhiên, tôi không quan tâm để thoát khỏi cảnh báo. Tôi muốn hiểu nó là gì và cải thiện mã số của tôi – yegor256