日期:2014-05-20  浏览次数:20765 次

新手求助,关于对象包装器类Integer不能改变值的问题
书上说Integer是不可变的,一旦构造,就不许更改包装在其中的值,也不能用包装器类实现修改数值参数的方法,但是又说Integer对象在算术表达式中会自动的打包和拆包,例如Integer n = 3;n++;编译器将自动插入一条拆开对象的指令,然后进行自增运算,最后再将结果打入对象包内。

  但是既然对象参数是引用传递,如果在方法内部用自增运算,应该还是能够改变对象原始的Integer对象吧,可是我写了如下代码,结果testInt = 3, result = 4
为什么testInt没有改变呢?



public class FinalInteger 
{
public static void main(String[] args)
{
Integer testInt = 3;
Integer result = change(testInt);
System.out.println("testInt = " + testInt + "\nresult = " + result);

}

static Integer change(Integer x)
{
Integer y = ++x;
return y;
}

}

------解决方案--------------------
有一种东西叫做引用,知道吗?引用可以被改变,但不可边对象本身并未改变

不知道也没关系,指针知道吗?

不知道就没办法说了
------解决方案--------------------
上面那位的意思是,testInt是对象。有一个指向他的引用。
static Integer change(Integer x)
{
Integer y = ++x;
return y;
}
里面发生了testInt的引用传递给x,Y是对象,是新建的对象,他本身有不同于testInt的引用。、
Integer y = ++x;这一步,并不是将引用传递,是值传递。返回的是对象,是引用。。