Các mã sau đây:
void someMethod(Object value)
{
String suffix = getSuffix();
if (suffix != null)
value += suffix;
[...]
}
biên dịch không có lỗi trong JDK 8 (sử dụng -source 1.6), nhưng không thành công trong JDK 6 với thông báo lỗi:
Operator '+' cannot be applied to java.lang.Object and java.lang.String
Trong khi tôi hiểu lỗi là gì, tại sao điều này lại biên dịch với JDK 8? Đây có phải là tài liệu ở bất cứ đâu?
Tôi đoán giá trị không phải là String. Nếu giá trị là một số nguyên thì tôi không có ý nghĩa gì khi thêm một chuỗi vào nó. Maybye bạn có thể thử chuyển giá trị thành chuỗi
—
fedoraHacker
@fedoraHacker Biểu thức
—
Grodriguez
value = value + suffix
là hoàn toàn hợp pháp bất kể loại giá trị. Vì vậy, nó có vẻ như value += suffix
là hợp pháp quá.
wow, tôi không có ý tưởng. Tôi nghĩ rằng toàn bộ quan điểm của các đối tượng khác nhau là xác định quy tắc cho những gì dữ liệu có thể và không thể làm. Toàn bộ quan điểm của việc có các kiểu dữ liệu và đối tượng khác nhau là tách biệt trách nhiệm để đảm bảo các kiểu thực hiện một việc, nhưng thực hiện tốt. Tôi chỉ bối rối rằng bạn có thể trộn các kiểu dữ liệu như vậy. Vâng, bạn học được điều gì đó hàng ngày :) và Value = value + hậu tố là chính xác giống như value + = hậu tố, vì vậy tôi không tranh chấp cú pháp nào cả
—
fedoraHacker
Có nhưng loại String có phần đặc biệt. Toán tử + ở đây là "toán tử nối chuỗi"; nếu chỉ một trong các toán hạng là một chuỗi, thì một chuỗi khác được chuyển đổi thành một chuỗi trước khi biểu thức được ước tính. Xem phần này của JLS .
—
Grodriguez
Ah tôi hiểu rồi, không biết chuỗi đã chuyển đổi nó như thế. Cảm ơn đã dành thời gian trả lời ngay cả khi câu hỏi đã được trả lời!
—
fedoraHacker