public class Example {
String str = "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" + ex.ch[0] + ex.ch[1] + ex.ch[2]);
} public void change(String str, char ch[]) {
str = "test ok";
ch[0] = 'g';
}
}
为什么输出结果是goodgbc,str没有发生变化,ch[]却变化了????

解决方案 »

  1.   

    方法都是值的传递,你只要记住这点就可以了。比如你change方法传入的其实是内存地址的值,那么str没变是因为纯粹把一个新的内存地址复制给str而已。至于ch数组呢?你却改变了内存地址上对应的数据,所以变了
      

  2.   

    那是当然啊, 学过C就明白了
    str传进去同传值差不多, ch[]是数组同传地址差不多.
      

  3.   

    str = "test ok";
    改成this.str = "test ok"; str就会变化了
    不然str只是传进来的那个参数,也只是给传进来的那个参数赋值,不是你上面定义的那个变量,对相同的变量名,要注意变量的作用范围,如果使用相同的变量名,要学会使用this
    基础还是要打扎实,希望你学习顺利
      

  4.   

    java对对象的传递是引用的值传递,原引用是恒指向原对象的。
    数组跟指针传递类似,是对指针的值进行传递。
      

  5.   

    这种问题我觉得是比较难回答的
    因为,我写一个类,会写清楚构造器,像这个类包含2个成员变量,就应该写个带参数的构造器,
    这样,创造对象时你就拥有了这个类的成员变量,然后一切都变清晰了,下面的change方法还需要
    带参数吗?
    打好基础吧
      

  6.   

    Java中方法参数进行的是值传递,所以并不能改变对象引用的值。所以str没有发生变化,而传数组是可以将其引用改变的。
      

  7.   

    值传递与地址传递的问题。
    前一个参数只是做了一个对good的拷贝,拷贝过来的东西无论如何改变也变不了原来的。
    后一个参数是一个字符数组。
    char ch[];
    ch其实是一个指针。(C里是这样,java里不是甚清楚)
    ex.change(ex.str, ex.ch); 
    这样调用change之后就把两个ch指向了同一块内存区域,改变其中任何一个另一个也跟着变。
      

  8.   

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

    你把值传过去了,这里的str,不是你要改的str,其实就相当于,重新命名的一个变量而已,如果你改成这样,也是一样的效果的
    public void change(String str_temp, char ch[]) { 
    str_temp = "test ok"; 
    ch[0] = 'g'; 

    把引用传递来一起学习,比较容易理解
      

  9.   

    java都是传值的 
    如果是对象  也是传对象引用的值--------------------------------------------
    http://www.soft51down.cn