package changXiang;public class StringTest { /**
 * @param args
 */ public void change(String str, char ch[]) {
str = "test_ok";
ch[0] = 'g';
} public static void main(String[] args) {
// TODO Auto-generated method stub
String str = new String("good");
char[] ch = { 'a', 'b', 'c' };
StringTest st=new StringTest();
st.change(str, ch);
System.out.println(str);
for(int i=0;i<ch.length;i++){
System.out.print(ch[i]);
}
}}

解决方案 »

  1.   

    为什么输出是good和gbc,我觉得应该是good,和abc才对?
      

  2.   

    public   void   change(String   str,   char   ch[])   { 
    str   =   "test_ok "; 
    ch[0]   =   'g '; 

    这里面,str是参数,是局部变量,他的值的改变和调用方法(main方法)没有关系.
    ch是数组,ch[0]='g',改的是数组元素,这个会影响到main()方法中的数组.
    如果是ch=new char[5];就不会影响到main()方法中的数组了.
      

  3.   

    你点"插入源代码"这个按钮,选择"java" 把代码插入到[code=Java]和 [/code]之间就可以了
      

  4.   

    JAVA中除了几个特殊的(如String,List等等)都是传值而不是传引用,引用的话,是可以改变原来的值的。
      

  5.   

    这个我也知道str是参数,级别比全局的高,但是就是能不明白有的改变,有的不变。如str没有变,而ch却变了。
      

  6.   

    这里面,str是参数,是局部变量,他的值的改变和调用方法(main方法)没有关系. 
    哎,我学到现在才晓得!
      

  7.   

    String是不可能变的,关于String的讨论这个论坛讨论的已经够多的了,LZ去找找相关贴,ch是数组,是引用,是会变的。基本类型传的是值,但基本类型的数组都是引用。
      

  8.   

    向LZ 推荐一个好的关于String方面的
    http://blog.csdn.net/ZangXT/archive/2009/05/19/4201979.aspx
      

  9.   

    1.main方法中,str指向内存中的一个地址A,地址A中存放着字符串good,
    2.当把str传给change方法时,jvm复制了一个str变量的引用B传给change方法,这个引用B也指向地址A,
    3.在你的change方法中,str   =   "test_ok ";把引用B的指向改变了,引用B不再指向地址A,但main中的str变量还是指向地址A的,这就是输出good的原因。第二个数组的问题
    1.main方法中定义了数组ch,指向内存中的一个地址C,存放着字符数组(简单起见,姑且这么说!)
    2.当把ch传给change方法时,jvm复制了一个ch数组的引用D传给change方法,这个引用D也指向地址C,
    3.在你的change方法中,ch[0]   =   'g ';把地址C中的内容改变了,而main终的ch数组还是指向地址C,所以打印出gbc
    4,如果在change方法中用ch = new char[]{XXXXXXX},那就把引用D的指向改了,不再指向地址C了,而main中的ch数组还是指向地址C,所以打印的时候会不变。还是abc
    希望有所帮助!!!
      

  10.   

    在方法中通过引用(这个引用是形参)改变引用指向的对象,这种改变是会保留下来,从而影响到调用方法的方法(main()).改变引用(这个引用是形参)本身,也就是让引用指向其它的对象,这种改变只是对引用的值做了改变,参数也是局部变量,它的生命期只限于方法体.方法执行结束,局部变量被释放.所以不会影响到调用方法的方法(main())