public class Example {
String str=new String("good");

char[] ch={'a','b','c'};
public static void main(String[] args){
Example ex=new Example();

ex.change(ex.str, ex.ch);
System.out.println(ex.str+"  and");
System.out.println(ex.ch);
}
public void change(String str,char ch[]){
str="test ok";
ch[0]='g';
}
}为什么运行结果是:good  and
gbc
不是:test ok and 
gbc

解决方案 »

  1.   

    其实change方法里做了两件事
    1.改变了str参数的重新指向
    2.改变了ch[]数组对象的内容
      

  2.   

    为什么运行结果是:good  and 
    gbc 
    不是:test ok and 
    gbc银行卡 卡1=new 帐户();//得到这个帐户的号码,就是引用这个帐户,卡里记的是帐户的号码
    卡1 = new 帐户();//这个银行重新记一个别的帐户了.不再是原来的那个帐户
    String str = "abc";//这时str是记录"abc"的内存地址(相当于上边所说的帐户号码)
    str="aaa";//这时str是记录"aaa"的内存地址
    要操作同一个对象,应该使用这个变量去操作,而不是改变这个变量的引用.
      

  3.   

    嗯 老问题了 java值传递
      

  4.   

    你改变的是方法的参数 str,而不是类成员 str。
      

  5.   

    java是值传递的.你传的两个参数,一个String,一个数组,都是引用类型.那么在change()方法里面,首先把两个传入的参数复制一个副本,由于都是引用类型,就都复制的地址.str="test ok";是把副本的引用指向了"test ok"字符串,在方法结束后,副本的生命周期结束(传入的地址没有受影响),所以str的值没有改变.同理,数组char ch[]也是复制了一个ch(引用的地址)的副本,在方法里面如果你是这样做的:ch={'x','y','z'};则方法结束,副本ch生命周期结束,传入的ch不变,还是abc.不过你的方法里面是直接改变了值ch[0]='g',要知道副本地址也是指向的源对象,按照副本的地址修改了源对象的值,ok,没问题,方法结束也没问题.不知道你懂了没有? 
      

  6.   

    2 楼的解释言简意赅。顶了!String 是字符串类型,通过函数change(String str,char ch[]),实现单向的值传递(即不论在函数 
            
            中如何处理 str ,都不会影响 类中 str 的值)char[] 是字符数组,通过函数change(String str,char ch[]),实现引用的传递。因此,在函数        change(String str,char ch[])中的操作,会影响 类中 相关的 值
      

  7.   

    不过如何改变change方法,使他运行的结果变成test ok and
    gbc