Trình biên dịch autoboxes giá trị nguyên thủy, điều này có nghĩa rằng
Integer value = 6;
sẽ được biên dịch như
Integer value = Integer.valueOf(6);
Integer.valueOf sẽ trở lại một thể hiện Integer với giá trị nhất định. Trong trường hợp của bạn i
bây giờ sẽ tham chiếu Số nguyên (6) thay vì Số nguyên (5), chính đối tượng Số nguyên (5) sẽ không thay đổi.
Để thấy điều này bạn có thể làm sau
Integer i = new Integer(5);//assign new integer to i
Integer b = i;//b refences same integer as i
i = 6;//modify i
System.out.println(i +"!="+b);
này sẽ in 6!=5
, nếu trường hợp số nguyên đã được sửa đổi nó sẽ in 6!=6
để thay thế.
Để làm rõ điều này chỉ có nghĩa là để chỉ ra cách gán cho Integer chỉ sửa đổi tham chiếu và không thay đổi bản thân Integer. Khi người dùng @KNU chỉ ra nó không chứng minh hoặc cho thấy sự bất biến của Integer, theo như tôi có thể nói sự bất biến chỉ được gián tiếp đưa ra bởi việc thiếu các phương thức sửa đổi trong API của nó và yêu cầu các cá thể trả về bởi Integer.valueOf phải được lưu trữ trong một phạm vi nhất định.
Gần như - nó biến nó thành 'Integer.valueOf (6)'. Xem phần này để biết thêm thông tin: http://marxsoftware.blogspot.com/2010/08/subtle-nuance-of-new-keyword-with.html –
Rất tiếc. My Bad :-) Tôi đã không thực sự làm phiền để tìm kiếm chính xác những gì nó dịch sang. – drekka