Không nó không nên:
Integer i1 = 128;
Integer j1 = 128;
autoboxing gây hai đối tượng Integer khác biệt được tạo ra trong việc thực hiện Java mà bạn đang sử dụng.
Nếu các giá trị số nguyên nằm trong khoảng từ -128 đến 127, thì JLS quy định rằng đối tượng Integer giống nhau sẽ được sử dụng; xem JLS 1.5.7. Tuy nhiên, JLS thực hiện không phải yêu cầu rằng i1
và i2
phải có các giá trị khác ngoài phạm vi đó. Thật vậy, các cuộc thảo luận sau đây trong JLS cho biết điều này:
Lý tưởng nhất, hãy bỏ một giá trị nguyên thủy p, sẽ luôn mang lại một tham chiếu giống nhau. Trong thực tế, điều này có thể không khả thi khi sử dụng các kỹ thuật triển khai hiện có. Các quy tắc trên là một sự thỏa hiệp thực dụng. Điều khoản cuối cùng ở trên yêu cầu các giá trị chung nhất định luôn được đóng hộp thành các đối tượng không thể phân biệt được. Việc triển khai có thể lưu vào bộ nhớ cache, lười biếng hoặc háo hức.
Đối với các giá trị khác, công thức này không cho phép bất kỳ giả định nào về danh tính của các giá trị được đóng hộp trên phần của lập trình viên. Điều này sẽ cho phép (nhưng không yêu cầu) chia sẻ một số hoặc tất cả các tài liệu tham khảo này.
Điều này đảm bảo rằng trong hầu hết các trường hợp phổ biến, hành vi sẽ là hành vi mong muốn, không áp đặt hình phạt hiệu suất quá mức, đặc biệt là trên các thiết bị nhỏ. Ví dụ, ít triển khai bộ nhớ hạn chế hơn, có thể lưu tất cả các ký tự và quần short, cũng như các số nguyên và độ dài trong phạm vi -32K - + 32K.
Nguồn
2010-03-23 13:00:55
như vậy một câu hỏi cụ thể, hmm, đáng ngờ – Will
@ Will Tôi đã nhìn thấy cùng một câu hỏi trong một cuốn sách SCJP –
tôi đặt cược rằng nó trả về false, true, false, true thay vì true, true, false, true –