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

java字符串基础问题

public class Test{
String str=new String ("Girl");
char ch[]={'d','b','c'};
public static void main(String [] args){
Test x=new Test();
x.change(x.str,x.ch);
System.out.println(x.str+"and"+x.ch[0]+x.ch[1]+x.ch[2]);
}
public void change(String str,char ch[]){
str="Boy";
ch[0]='a';
}
}

最后输出结果为什么是Girl and abc,请各位大神详细解释一下,还有就是String 类字符串在创建后为什么不能被修改?
------解决方案--------------------
引用:
Quote: 引用:

你在change方法中只是改变了change方法的str参数的引用,而并没有改变参数的值。而ch[]你改变了这个数组中的第一个对象,这个是改变对象,所以ch[]对象也跟着变化。一定要分清楚什么时候只是修改了对象的引用,而什么时候是修改了对象。一般来说如果改变对象内部的某一部分就属于改变对象。

还有一点就是什么时候只是修改了对象的引用,什么时候是修改了对象。这点能不能详细说明一下

定义①→Object(name="张三",age="22")  (引用①指向Object(name="张三",age="22") )//上一条这里写错了。。。

change(②){
  ②→Object(name="李四",age="55")
}

调用change方法,其实是让chage的参数②指向Object(name="张三",age="22"),在方法体内引用指向改变为②→Object(name="李四",age="55"),没有改变原来的对象,所以跟原有的①无关。



定义①→Object(name="张三",age="22")

change(②){
  ②.age="12"
}
这时是改变了②所引用的Object对象的age属性也就是改变了Object对象。而①始终指向这个对象,这时打印①,就是打印出来改变的Object