JAVA这个程序的运行结果为什么会是这样啊,求详解解答!

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.print(ex.str+" and ");
    Sytem.out.print(ex.ch);
  }
  public void change(String str,char ch[]){
    str="test ok";
    ch[0]='g';
  }
}
为什么不是A good and abc ,而是A good and gbc呢,按道理应该是abc呀,为什么字符串不能覆盖而这个数组就能呢?求一步一步详细解答,好的加分!
最新回答
冷巷

2024-07-10 00:59:38

char[]ch={'a','b','c'};
这句话,实际上说明了ch是指向内存中的指针(实际上java中,所有的数组,包括String[]定义的变量,都是一个指针形式)。
它传入到方法中的时候,是给定一个指针,它会指向那个内存地址,当对其值做修改的时候,修改的并不是它的指针地址,而是指针所指的内容。所以数组的改变会体现出来
断言断梦断思念

2024-07-10 04:06:11

java中是值传递,不是引用传递,你的change方法根本没有改变str的值,如果你在change方法中的str前面加一个this 结果就不同了
林中教师

2024-07-10 02:46:23

因为在方法里面,字符串str是值传递,也就是说传过去的是str代表的值"good",而不是把ex.str的地址传过去,而你传数组的时候,传的是数组里面第0个元素的储存地址,所以当你把ch[0]指向改变成字符'g'的地址时,自然输出也就变成'g'而不是'c'了。
Lonely丶小妞

2024-07-10 02:54:10

在java里String是特殊类型,指向的是引用,不能直接覆盖