thể trùng lặp:
Varying behavior for possible loss of precisionJava phá vỡ gõ mạnh mẽ! Ai có thể giải thích nó?
Tôi tìm thấy một không thống nhất trong Java kiểm tra kiểu mạnh tại thời gian biên dịch. Vui lòng xem mã sau:
int sum = 0;
sum = 1; //is is OK
sum = 0.56786; //compile error because of precision loss, and strong typing
sum = sum + 2; //it is OK
sum += 2; //it is OK
sum = sum + 0.56787; //compile error again because of automatic conversion into double, and possible precision loss
sum += 0.56787; //this line is does the same thing as the previous line, but it does not give us a compile error, and javac does not complain about precision loss etc.
Có ai có thể giải thích cho tôi không? Có phải đó là lỗi đã biết hoặc hành vi mong muốn không? C++ đưa ra cảnh báo, C# đưa ra một lỗi biên dịch.
Java có đánh mạnh không? Bạn có thể thay thế + = bằng - = hoặc * = - mọi thứ đều được trình biên dịch chấp nhận.
lạ là bạn đang lưu trữ phao trong int biến –
@ KarelFrajtak Một số thập phân mà không có một công cụ sửa đổi (như 'd' hoặc' f') là một số hai, không phải là một phao. Bên cạnh đó, tôi nghĩ rằng bạn có thể bị thiếu điểm .. – nfechner
Java rõ ràng đã phạm sai lầm ở đây. Họ nên có được chính xác hơn trong khi diễn viên im lặng được cho phép. Và lý do cho rễ đúc trong một quyết định tồi tệ khác. Thông số kỹ thuật về hoạt động loại tích phân là một mớ hỗn độn hôi thối. – irreputable