我们可以将所有包装类称为不可变吗? 这里整数像String一样工作....所以在包装类中有混淆
String s1 = "hi";
concatString(s1);
System.out.println(s1);
Integer i = 10;
changeInteger(i);
System.out.println(i);
private static void changeInteger(Integer i) {
i=i+10;
System.out.println(i);
}
private static void concatString(String s1) {
s1 = s1+"Bye";
System.out.println(s1);
}
输出:hiBye 嗨 20 10
答案 0 :(得分:0)
是的,原始包装类和String
是不可变的。我想你的困惑的来源是以下几行:
private static void changeInteger(Integer i) {
i=i+10;
....
确实参数类型为Integer
,看起来您正在通过添加1来更改其值。实际上在自动装箱之前,此行看起来像:
i = new Integer(i.intValue() + 1);
此行从包装器中提取int
值,添加1
,然后将结果传递给Integer
的构造函数,该构造函数创建Integer
的新实例。
java 5中引入的Autoboxing是一个"编译魔术"处理行的功能
i=i+10;
作为
i = new Integer(i.intValue() + 1);