void f(Integer i){
    ++i;
}Integer i = 1;
f(i);
System.out.print(i);       //仍然是1?为什么?

解决方案 »

  1.   

    void f(i) 参数是值传递,计算结果不会保存会 i 变量,修改成这样试试:void f(integer i){ ++i;return i;)
    ...
    system.out.print(f(i));
      

  2.   


    都void的了,还return i   = =!
      

  3.   

    public int  f(Integer i){ 
        ++i; 
        return i;

    public static void main( String args[]){
    Inte aaa = new Inte();
    Integer i = 1; 
    i = aaa.f(i); 
    System.out.println(i);   
    }
      

  4.   

    值传递,和String一样理解就好了
      

  5.   

    是可以的.应该没有问题吧.
    Integer i = new Integer(1); 
      

  6.   

    java的基本类型并没有真正的封装成对象
      

  7.   

    JDK 1.5实现了基本类型封装.
      

  8.   

    传值和传引用,我是知道的。函数里的i是实参的以个copy,但是他们都指向同1个堆中的对象。所以我认为可以改变其值。8楼lastsweettop的回答比较接近我所想的,但是是不是真的这样?
      

  9.   

    可能是因为是基本类型,在进行函数执行的时候堆栈上另有一块是分配给参数i的,作为一分copy,所以他们并没有指向同一个区域吧!
      

  10.   


    赞同。既然被你申明成了vuid类型,就不会返回任何改变的值了。要想改变,参考4楼的。
      

  11.   

    在 f 方法内部的  ++i  源数据copy后拆箱了吧  也就是说原来的 Integer i 没发生改变 改变的是另一个罢了猜测的  呵呵
      

  12.   

    小a,1.5的新特性...叫什么auto-boxing...支持int这样的基本数据类型与其对应的类的自动转化了.
    好象是这样........这是这个东西让值传递和引用传递变的更诡异了.
    你可以尝试下这样写
    class A
    {
    Integer i=new Integer(0);
    }
    class B
    {
    public static void main(String[] agrs)
    {
     A a=new A();
     f(a);
    System.out.println(a.i);
    }
    public static void f(A a)
    {
    ++a.i;
    }
    }
    相信你能达到你的目的
    当然你要问为什么,我只能告诉你,你需要去看JAVA的参数机制