解决方案 »

  1.   

    因为str传过去的是引用,而ch传过去的是对象,所以结果就可想而知了
      

  2.   

    方法中的str是局部变量,刚开始是指向的"good"后来指向了"test ok"而原来的成员变量还是指向的"good".
    方法中的ch是局部变量,指向'a''b''c'而把c[0]改为'g',因为他和成员变量指向同一块内存区域所以成员变量也指向了'g''b''c'
      

  3.   

    如果你不理解上面的解释,建议你还是先
    看看java基础的书吧,
      

  4.   

    java有两种传递方式,值传递,和引用传递。
    ex.change(ex.str,ex.ch); 
    ex.str是一个值传递,本身不会改变。
    ex.ch它是一个数组,是引用传递,会改变。
    java中如果传递的是一个对象,或者数组,或者集合,其值都会有改变的情况。
      

  5.   

    String 对象是不可改变的,只是传递引用
      

  6.   

    java只有一种传递方式,值传递
    传过去的都是副本
     public void change(String str,char ch[])
    ex.str传入引用变量的副本,则会有一个新的引用str1(应该是匿名的取个名字好区分)指向原来的String字符串
    而你将str1指向新的string对象不影响str指向原对象
    ex.ch也一样,但是区别在于它没让ch1指向新对象,而是依旧指向原对象,这样ch1和ch其实就是一回事了
      

  7.   

    java传参的时候都是拷贝一份原值传过去
    首先,String对象str:刚开始change中的str也是指向new String("good")这个对象,但是在change方法中你又重新给它赋值了。String是不可变的,所以其实是新创建了"test ok"对象,然后change中的str指向了"test ok"。但是,这并不影响原来的str。
    而对于数组ch来说,拷贝的参数和成员变量ch指向的是同一个数组对象,所以改变一个另一个也就改变了
      

  8.   

    首先,String 和数组都属于   引用传递---并没有上面所说的引用和值传递的区别,值传递指的是八种数据基本类型照成原因分析
    引用传递 后ex.str 和方法的局部变量str指向的是同一个对象,chang方法执行str=str="test ok"后,会在常量池创建一个新的对象
    而且此时局部变量指向的地址已经执行"test ok"常量池对象  而ex.str的地址还是原来的"good"地址数组传递后  方法内并没有 改变地址的指向, ch[0]='g':只是改变该地址内的数据,所有值已经改变了
    同理:如果执行ch=new char[]{'g','b','c'};   也不会改变ex.ch的数据
      

  9.   

    String是不可改变的,在调用方法传递参数时String和char[]都是传递的引用,但是String更改值时不改变原来引用所指内存的字符串,而是另外开辟一块内存存放新的字符串,然后将方法中的引用指向这块内存,原来的内存中的字符串不变,而原来的引用也没变,所以全局变量中的字符串没有改变。实在不理解可以参考下StringBuffer和String的区别。
      

  10.   

    java传递值,局部变量指向新地址,不影响外面变量,指向同一个地址,但是通过地址改变对象内容,那么对象自身当然发生改变.
      

  11.   

    话说这个还是传值和传地址的区别吧,str在函数中只是一个局部变量而已,但是你的ch,穿的是地址多来,会影响原本的值
      

  12.   

     public void change(String str,char ch[])

       str="test ok"; 
       ch[0]='g';   
    }
    你这个改变的是局部变量str的值,如果你写成
     public void change(char ch[])

       str="test ok"; 
       ch[0]='g';   
    }
    这样就会改变了