public class Test{
    public static void add3(Integer i){
        int val = 0;
        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());
    }
}

解决方案 »

  1.   

    为什么不是0?你add3里面的i的生存周期到add3结束的那个}就已经over了
      

  2.   

    我猜是编译器把函数的参数Integer"优化"成int了
      

  3.   

    函数接受的是一个拷贝,不是真的句柄哦
    我怀疑楼主可能把作为参数的句柄理解为C++里的引用了
    如果是C++,如下代码确实是会改变i的值的void add3(int& i){
    i = 3;
    }
      

  4.   

    JAVA里有个规定:
    内置变量是值传递(int、char...)
    对象是引用传递
      

  5.   

    同意CalvinKyle(浮躁低能程序员) 的add3里面的i是形参,并不是main中的i
    要想得到3,可以public class Test{
        static Integer i=new Integer(0);
        public static void add3(Integer b){
            int val = 0;
            val = b.intValue();
            val+=3;
            i=new Integer(val);
        }
        public static void main(String args[]){
            
            add3(i);
            System.out.println(i.intValue());
        }
    }
      

  6.   

    开什么玩笑啊add3(i);这个只是把i的值传进去而已,你也没有返回值,那么它所做的改变只限制在add(i)里.和你的System.out.println(i.intValue());没什么关系,i还是你add(i)之前的i.
      

  7.   

    哈哈  对象作为参数传递是传值不是传址,因此你打印使用的i 和 add方法里的i 其实是两个不同的对象