ฉันสามารถระบุได้อย่างชัดเจนว่าจำนวนเต็ม (และลัทธิอื่น ๆ เช่น Float, Short ฯลฯ ) ไม่เปลี่ยนรูปด้วยโค้ดตัวอย่างง่ายๆ:
ตัวอย่างรหัส
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));
}
private void doInteger(Integer i){
i=1000;
}
private void doStringBuilder(StringBuilder sb){
sb.append(" there");
}
}
ผลลัพธ์ที่แท้จริง
ผลลัพธ์มาถึงเขาHi There 100แทนที่จะเป็นผลลัพธ์ที่คาดหวัง (ในกรณีที่ทั้ง sb และ i เป็นวัตถุที่เปลี่ยนแปลงได้) Hi There 1000
สิ่งนี้แสดงให้เห็นว่าออบเจ็กต์ที่สร้างโดย i ใน main ไม่ได้ถูกแก้ไขในขณะที่ sb ถูกแก้ไข
ดังนั้น StringBuilder จึงแสดงพฤติกรรมที่เปลี่ยนแปลงได้ แต่ไม่ใช่ Integer
จำนวนเต็มจึงไม่เปลี่ยนรูป ดังนั้นพิสูจน์แล้ว
รหัสอื่นที่ไม่มีเพียงจำนวนเต็ม:
public class Test{
public static void main(String... args){
Integer i = 100;
Test c = new Test();
c.doInteger(i);
System.out.println(i);
}
private void doInteger(Integer i){
i=1000;
}
}