java中Integer传参是无法改变原值的,如
Integer i = new Integer(-1);
void chang(Integer i){
i = 1;
}
甚至在chang函数中new Integer(1)都无法改变 i 的值,如i = new Integer(1);
那么问题是:为什么可以改变Object中的Integer属性呢?如:
public class ObjectName{
private Integer id;
public ObjectName(Integer id){
this.id = id;
}
public void setId(Integer id){
this.id = id;
}
}
ObjectName实例调用setId函数是可以改变Integer id的,这是为什么?
值传递与引用比较清楚。Integer不可变的,在java官方中明确指出了,所以有i = new Integer(1)都无法改变i原来的值。
我的问题就在这里:Integer变量既然是不可变的,那为什么用Object封装后就可变了呢?
this.i表示这个类的成员变量,i表示局部变量。
chang(Integer i)是值传递不会改的