java 中 Integer 传参方式的问题,不是说Integer是引用传递么?但为什么不会改变it

public class Main {

public static void main(String[] args) {
Integer it=new Integer(123);
System.out.println(it);
}

public static void text2(Integer it) {
it =99;
it=it+99;
}

}

java 中 Integer 传参方式的问题,不是说Integer是引用传递么?但为什么不会改变it的值?
忘了写调用了,我但我字了调用也没用

text2(it);
同样还是没用把it的值改变

Java本身都是值传递式的调用,对于对象传递的是地址值。给地址值重新赋值等于重新指向,不会影响外层。
而且这里Integer对象也有特殊性。其实现上可能类似
class Integer{
final int value; //一旦赋值,就不能改变。
}
这就出现:调用时传的地址值不能改变外层+对象本身又不能改变。导致这个值没法改变
解决方案很多
1、java风格就是,单个值用返回值。return i; 外面再i=foo();赋值;多个值用数组或对象。
2、传递自己的封装类。class MutableInteger{ int value;}
3、传递专用AtomicInteger原子整型对象
public static void main(String[] 参数) {
AtomicInteger i=new AtomicInteger(40);
i.intValue();
System.out.println(i);
}
public static void change(AtomicInteger i) {
i.set(55);
}
也可以实现传递后改值 ,
推荐方案1,尽量避免
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-08-02
这个确实蛮难理解的,我也只能简单的说一下,希望能帮到你。
虽然你传了it这个参数到text2方法中,但实际上传得是it这个引用,并没有传对象的地址进去。由于text2方法没有返回值且it并不是成员变量,所以在text2中执行的语句其实可以看成一个无关的语句,并不会真正改变it原本所指向的Integer对象。所以输出地仍然是123.
你如果要改值的话可以return it或把it改为成员变量就好了。
第2个回答  2011-08-02
public class Main {

public static void main(String[] args) {
Integer it=new Integer(123);
text2(it);
System.out.println(it);
}

public static void text2(Integer it) {
it =99;
it=it+99;
}

}
要运行一下方法啦。。。。追问

我写了调用一样是没用改变值

追答

http://blog.sina.com.cn/s/blog_4b622a8e0100c1bo.html

像 Integer String 这些特别的类 传的是值吧

这个看一下吧 。

第3个回答  2011-08-02
这里的test2(Integer it )好像没调用