日期:2014-05-20  浏览次数:20868 次

java初学者请教一下
public class Example{
  String str=new String("Hello");
  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");
     System.out.print(ex.ch);
}
  public void change(String str,char ch[]){
     str="test ok";
     ch[0]='g';
}
}


请教一下为什么这段代码最后输出 Hello and gbc,而不是test ok and gbc?

------解决方案--------------------
因为str传入的是字符的值
而char传入的是地址值。。
------解决方案--------------------
因为String不可变,在change函数中,并没有改变String的值,而数组传的是引用,所以两个ch其实指向同一个数组,修改一个必然会导致另一个也跟着改变!另外,String类型不要使用new来声明直接String str = "Hello"!
------解决方案--------------------
我的理解是:第一个String跟你另外一个帖子差不多,不同的是传char[]参数,把全局变量传进去改了,跟2楼说的一样,指向同一个数组,所以变了,String传的看着像也是把全局参数传进去,其实就是传了'Hello'这个字符串进去而已,跟变量没关系。
------解决方案--------------------
Java中的String处理都是new的新对象,像:str="test ok",其实是把str变量指向了一个新的String(新的内存、新的地址),而不是对原来的String在内存中进行修改,这也是为什么在对字符串进行大量拼接的时候建议用StringBuilder的原因