Tôi có thể làm rõ rằng Số nguyên (và các tín ngưỡng khác của nó như Float, Short, v.v.) là bất biến bằng mã mẫu đơn giản:
Mã mẫu
public class Test{
public static void main(String... args){
Integer i = 100;
StringBuilder sb = new StringBuilder("Hi");
Test c = new Test();
c.doInteger(i);
c.doStringBuilder(sb);
System.out.println(sb.append(i)); //Expected result if Integer is mutable is Hi there 1000
}
private void doInteger(Integer i){
i=1000;
}
private void doStringBuilder(StringBuilder sb){
sb.append(" there");
}
}
Kết quả thực tế
Kết quả đến với anh ấy Hi There 100 thay vì kết quả mong đợi (trong trường hợp cả sb và i là các đối tượng có thể thay đổi) Hi There 1000
Điều này cho thấy đối tượng được tạo bởi i trong main không bị sửa đổi, trong khi sb được sửa đổi.
Vì vậy, StringBuilder đã chứng minh hành vi có thể thay đổi nhưng không phải là Số nguyên.
Vì vậy Integer là Immutable. Do đó đã được chứng minh
Một mã khác không chỉ có Số nguyên:
public class Test{
public static void main(String... args){
Integer i = 100;
Test c = new Test();
c.doInteger(i);
System.out.println(i); //Expected result is 1000 in case Integer is mutable
}
private void doInteger(Integer i){
i=1000;
}
}