Tôi đã đọc ở khắp mọi nơi khi bạn xác định Số nguyên từ -128 đến 127 trong Java, thay vì tạo đối tượng mới, nó trả về một đối tượng đã được tạo.Nhóm Java Integer. Tại sao?
Tôi không thấy điểm nào khác ngoài việc cho phép người lập trình mới so sánh các đối tượng Integer với ==
để xem chúng có cùng số không, nhưng tôi nghĩ điều này là xấu vì chắc chắn họ nghĩ rằng họ có thể so sánh bất kỳ số nguyên nào với ==
và cũng đang dạy một phương pháp không tốt trong bất kỳ ngôn ngữ lập trình nào: so sánh nội dung của hai đối tượng 'khác nhau' với ==
.
Có lý do nào khác giải thích tại sao việc này được thực hiện không? Hoặc là nó chỉ là một quyết định xấu khi thiết kế ngôn ngữ (Theo quan điểm của tôi) như dấu chấm phẩy tùy chọn trong JavaScript?
EDIT: Tôi thấy ở đây là họ giải thích các hành vi: Why does the behavior of the Integer constant pool change at 127?
Tôi hỏi tại sao họ thiết kế nó để có hành vi này, và không tại sao hành vi này xảy ra.
Có một chút không cần thiết để phân bổ các đối tượng mới và mất bộ nhớ khi chúng không thay đổi và có thể được chia sẻ. –
Có lẽ tối ưu hóa bộ nhớ là một câu trả lời, đừng nghĩ về nó. –
Nó tiết kiệm bộ nhớ, nhanh hơn và giảm áp lực lên bộ thu gom rác. Việc sử dụng lại các đối tượng có thể nhanh hơn đáng kể và một số tùy chọn tăng kích thước bộ nhớ cache Integer lên 10.000 hoặc 20.000 vì lý do này. –