public class Sub{ 
String str=new String("good"); 
char ch[]={'a','b','c'}; 
public static void main(String args[]){ 
Sub ex=new Sub(); 
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'; 


请问为什么得到的结果是:good and gbc 
而不是good and abc 

解决方案 »

  1.   

    public void change(String str,char ch[]){  
    str="test ok";
    ch[0]= 'g ';  
    }  
    这个方法执行后 Str并没有改变 方法里面的Str和外面的是两个概念
    而ch[0]的确把char ch[]={ 'a ', 'b ', 'c '}; 的第一个元素改变了
      

  2.   

    ch[0]= 'g ';  
    ---
    你把数组内容改了,当然是gbc了。
      

  3.   

    1.ex.change(ex.str,ex.ch):改变了ch[0]的值
    2.String str=new String("good")中的str是包装类
    和public void change(String str,char ch[]){  
    str="test ok";
    ch[0]= 'g ';  
    }  中的str不一样,所以没有改变
      

  4.   

    我想问一下String str,char ch[]同是对象引用 差距在哪? 2楼说是两个概念  是怎么样的两个概念法? 
      

  5.   

    我想问一下String str,char ch[]同是对象引用 差距在哪? 2楼说是两个概念  是怎么样的两个概念法? 
      

  6.   

    因为您的str是一个String的实例的引用,它里面存的不是good字符串,而次引用的所在的地址是在内存区中"good"的地址。
    而ch[0]所在的地址存储的就是'a',它是一个字符变量。
    将String str=new String("good");  改为String str=good";就会得到您想要的结果。  
      

  7.   

     sorry 结果是特test ok and gbc
      

  8.   

    public class hh{
    String str=new String("good");
    char ch[]={ 'a', 'b', 'c'};
    public static void main(String args[]){
    hh ex=new hh();
    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";
    this.str=str;
        ch[0]= 'g';
    }
    }
    这样就可以修改Str的值了
      

  9.   

    LZ要理解String是不可变的字符串.
      

  10.   

    LZ 下面那个参数写的挺迷糊人的 别用同一个名字哈public void change(String aaa){ 
    aaa= "test   ok "; 
    this.str=aaa; 
        }
    一个是值String str=new String( "good "); 一个是对象引用 根本定义就不同啊 这样写 容易迷糊 .
      

  11.   

    str 相当于是final型的, ch[0] 就是一个成员变量;