Tôi đang đọc SCJP Java 6 của Kathy Sierra và Bert Bates và cuốn sách này làm tôi bối rối. Trên trang 245, họ tuyên bố rằng đoạn mã dưới đây.Sử dụng toán tử == trong Java để so sánh các đối tượng bao bọc
Integer i1 = 1000;
Integer i2 = 1000;
if(i1 != i2)
System.out.println("different objects");
//Prints output
different objects
Sau đó, trên trang rất cạnh họ có đoạn mã sau
Integer i3 = 10;
Integer i4 = 10;
if(i3 == i4)
System.out.println("same objects");
//Prints output
same objects
Tôi rất bối rối! Khi tôi thử điều này một mình, có vẻ như bạn không thể sử dụng == để so sánh cùng cách bạn sẽ sử dụng phương thức equals(). Sử dụng == luôn cho tôi 'sai' ngay cả khi các biến Số nguyên được đặt thành cùng một giá trị (ví dụ: 10). Tôi có đúng không? Sử dụng == để so sánh cùng một đối tượng Số nguyên (có cùng giá trị) sẽ luôn dẫn đến 'false'
Tôi nghĩ rằng liên kết này có thể giúp bạn: http: //stackoverflow.com/questions/1514910/when-comparing-two-integers-in-java-does-auto-unboxing-occur – Tarik
bản sao của http://stackoverflow.com/questions/5277881/why-arent-integers- cached-in-java – Patrick
Và điều này: http://stackoverflow.com/questions/5117132/int eger-wrapper-objects-share-the-same-instances-only-trong-the-value-127, http://stackoverflow.com/questions/8427416/why-is-true-for-some-integer-objects – Patrick