Nó không cho phép điều này vì các nhà thiết kế Java (chính xác) nhận ra rằng quá tải boolean/integer trong C và C++ là một nguồn đáng kể của các lỗi.
(Tôi nhớ lại nhìn thấy rằng bằng văn bản trong một số lý do thiết kế, nhưng tôi không thể tìm thấy nó.)
Ví dụ:
if (i = 0) {
...
}
là hợp pháp nhưng có lẽ một lỗi trong một ứng dụng mà được viết C hoặc C++.
Java tránh sự cố này và các sự cố khác bằng cách tạo boolean
và các kiểu dữ liệu số nguyên các loại riêng biệt không thể chuyển đổi từ loại này sang loại khác. Vì vậy, ở trên là một lỗi biên dịch trong Java.
Bây giờ điều này không giải thích lý do tại sao bạn có thể không rõ ràng loại đúc một boolean
một int
. Nhưng tôi nghĩ rằng có thể được hiểu bằng cách quan sát như sau:
Bạn hiếm khi cần phải làm điều đó trong chương trình Java thực.
Số < -> phép boolean sẽ không khớp với cách mà các loại phôi khác hoạt động. Đặc biệt, đối với các kiểu khác có các phôi lên và xuống, và các phôi lên nhau trong Java không yêu cầu một kiểu diễn xuất rõ ràng.
Bạn không thể nhập số giữa các số và chuỗi hoặc giữa các chuỗi đối tượng khác. Đây là các chuyển đổi , không phải loại phôi. Và int
< ->boolean
cũng vậy.
1 - Tôi là cẩu thả với thuật ngữ của tôi ở đây (cố tình). Thuật ngữ Java chính xác là "mở rộng" và "thu hẹp". Thu hẹp các chuyển đổi yêu cầu loại bỏ một cách rõ ràng với một ngoại lệ hạn chế cho các chữ. Các chuyển đổi mở rộng không yêu cầu loại bỏ.
Nguồn
2013-04-29 14:55:38
Bởi vì một 'int' không phải là một' boolean'. –
Quy tắc dành cho việc đúc là gì? Zero là sai, bất cứ điều gì khác là sự thật? Số âm sẽ được xử lý như thế nào? Bạn có được phép thực hiện toán học không? –
* "Tại sao Java không bao gồm tính năng này?" * Người ta có thể hỏi tại sao Java không bao gồm nhiều thứ có thể đạt được trong một dòng mã duy nhất. Tôi muốn đặt 'API bloat' là lý do. –