public class test {
public static void add3(Integer i){
int val=i.intValue();
 val+=3;
 i= new Integer(val);
}
public static void main(String args[]){
Integer i= new Integer(0);
add3(i);
System.out.println(i.intValue());
}
}
程序运行结果是0,为什么啊?int型传递的是值本身,不是对象的引用啊

解决方案 »

  1.   

    你在方法add3()中虽然对i重新赋值,但你在 main(String args[])里面输出的还是
    Integer i= new Integer(0);
    你并没有把,val+=3; i= new Integer(val);的i.intValue()传回来,所以输出的是0了。
      

  2.   

    Integer是类,i是一个类对象的引用
    在调用的方法里给引用赋值是没有效的 ,因为它传的是地址引用的拷贝
      

  3.   

    明白了,但是如果我要把值传回来,
    我知道只要把add3的返回类型改为integer可以实现,我想知道还有没有其他方法,并且不改动方法add3。
      

  4.   

    lei_1021() ( ) 信誉:100    Blog  2006-12-04 10:10:12  得分: 0   
     
       明白了,但是如果我要把值传回来,
    我知道只要把add3的返回类型改为integer可以实现,我想知道还有没有其他方法,并且不改动方法add3。
      ===========
    1)写成一个数组Integer i[1];
    2)自己定义一个继承Integer的类: class MyInteger
    {
        Integer i;
        MyInteger(){}
        MyInteger(Integer i){this.i=i;}
        public void setInteger(Integer i){this.i=i;}
        public Integer getInteger(){return i;}
    }
    然后:
    public static void add3(MyInteger i){
    int val=i.getInteger().intValue();
     val+=3;
     i.setInteger(new Integer(val));
    }
      

  5.   

    通俗的来讲
    add3(i)的i 是附给add3。add3(i)运行完后,i并不带回main中,所以i还是main中的i。
      

  6.   

    我同意bill111的看法不知道对不对!
      

  7.   

    add3(Integer i)中传入的是引用的拷贝,对拷贝赋值是没有效果的.
    相同的还有String,很容易出错的.
      

  8.   

    学习下,改成这样可以得到3
    public class Test {
    public static int   add3(Integer i){
    int val=i.intValue();
     val+=3;
     i= new Integer(val);
     return i;
    }
    public static void main(String args[]){
    Integer i= new Integer(0);

    System.out.println(add3(i));
    }
    }