Integer(および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)); //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");
}
}
実結果
結果は期待される結果ではなくHi There 100になります(sbとiの両方が変更可能なオブジェクトの場合)Hi There 1000
これは、メインでiによって作成されたオブジェクトが変更されていないのに対し、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); //Expected result is 1000 in case Integer is mutable
}
private void doInteger(Integer i){
i=1000;
}
}