class Box {
int size;
Box(int s) {
size = s;
}
}public class Laser { public static void main(String[] args) {
Box b1 = new Box(5);
Box[] ba = go(b1, new Box(6));
ba[0] = b1;
for(Box b : ba)
System.out.print(b.size + " ");
}

static Box[] go(Box b1, Box b2) {
b1.size = 4;
Box[] ma = {b2, b1};
return ma;
}
}静态方法那不懂。。

解决方案 »

  1.   

    go方法返回一个Box对象类型的数组,在该方法中同时修改了引用b1所指的对象的变量size的大小
      

  2.   

    4 4折腾了半天都是b1那个变量指向的Box对象,最后连数组的第一个引用元素也指向了b1
      

  3.   


    public class Laser {    public static void main(String[] args) {
            Box b1 = new Box(5); //b1的size为5
            Box[] ba = go(b1, new Box(6));//调用go方法,这是ba[0]=b2,ba[1]=b1
            ba[0] = b1;//ba[0]重新赋值
            for(Box b : ba)//打印的都是b1对象的size
                System.out.print(b.size + " ");
        }
        
        static Box[] go(Box b1, Box b2) {
            b1.size = 4;//b1的size为4
            Box[] ma = {b2, b1};
            return ma;
        }
    }运行结果:4 4 
      

  4.   

    方法传进去不是传参数的副本吗?为什么b1.size = 4传进去会变成4,不是原来的5?
      

  5.   

    java传参数都是reference“引用”,也就是c语言的指针
      

  6.   

    JAVA对象传递的是对象引用的幅本,所以b1还是指向new Box(5),所以值改变啦