Trong Java Boolean (như String) là không thay đổi. Điều đó có nghĩa là nếu bạn sử dụng
Boolean x = new Boolean(true);
x = false;
x sẽ trỏ đến một đối tượng khác sau "x = false" so với trước đây. Vì vậy, nếu bạn sử dụng phương thức Boolean.valueOf() Java sẽ quan tâm rằng chỉ có hai đối tượng Boolean ở mức tối đa, một đối tượng đại diện cho true và cái kia biểu diễn sai. Nếu bạn sử dụng .valueOf (true) nó sẽ trả về một handle cho đối tượng true và nếu bạn sử dụng .valueOf (false) nó sẽ trả về một handle cho đối tượng false. Vì vậy bạn không tạo ra bất kỳ đối tượng không cần thiết nào và do đó chúng sẽ không bị xóa bởi bộ thu gom rác.
Nếu bạn sử dụng "Boolean() mới" thay vì điều này không hoạt động và Java sẽ tạo đối tượng mới mỗi lần. Vì vậy, bạn sẽ có một tấn các đối tượng không cần thiết mà có thể sẽ được giải phóng khá nhanh chóng và phải được làm sạch bởi bộ thu gom rác. Vì vậy, chi phí cho bạn nhiều bộ nhớ hơn (cho tất cả các đối tượng), thời gian cho việc phân bổ (khi tạo Booleans mới) và thời gian cho deallocation (khi các đối tượng bị thu gom rác thu thập), trong khi cho bạn không có lợi thế nào cả.