首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java相关 >

java菜鸟请问一下

2013-07-20 
java初学者请教一下public class Example{String strnew String(Hello)char[] ch{a,b,c}publi

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的原因

热点排行