不对!
java永远都时传值调用。

解决方案 »

  1.   

    对于基本类型时传值调用大家很容易理解。我这样说肯定有人会反对。既然你说java永远时传值调用,为什么当参数是对象时,这个对象的值会被改变呢?这难道不是传址吗?
    非也?下面我来给解释一下:当传递的参数是一个对象时。
    举个例子:
    public class Test {
      public static void main(String[] args) {
        Test test = new Test();
        Xxx a = new Xxx();
        System.out.println("Before the mothed: a = " + a);
        test.change(a);
        System.out.println("After the mothed: a = " + a);
      }  public void change(Xxx x) {
        x = ...;
        System.out.println("In the mothed: x = " + x);
      }
    }当调用exchange方法时,a,b的值的拷贝被传给了exchange方法。
    注意:
    这里的拷贝时对a和b这两个对象变量的值的拷贝,而不是对象的拷贝!!
    所以,这时候a和x两个对象变量同时指向了同一个对象。
    当x所指向的对象变量被修改时,a所指向的对象变量也被修改了!
    因为他们都指向同一个对象。这就是为什么java的传值调用也能修改对象的原因!
      

  2.   

    to : dongjb
    对象类型(除非可变对象)是传址.能就"除非可变对象"做个说明吗?
    可变对象是传值吗?