论述题
2. 下面程序是否存在问题?如果存在,请指出问题所在,如果不存在,说明输出结果。
public class Test
{
public static void main(String[]args)
{
String str=new String("good");
char[]ch={'a', 'b', 'c'};
Test ex=new Test();
ex. change(str,ch);
System.out.print(str+"and");
System.out.print(ch);
}
public void change(String str,char ch[])
{
str="testok";
ch[0]='g';
}
}
【正确答案】不存在问题,输出结果为goodandgbc。
【答案解析】 在调用change方法时,str和cb传递的都是引用,在方法中修改了ch指向对象的内容,由于形参与实参指向相同的对象,因此,通过形参对对象内容的修改对实参是可见的。对于str来说,修改的是引用本身,也就是说,修改的是引用的值,而不是修改了引用指向的内容。形参引用的值是实参引用值的一个拷贝;从这个角度来讲,引用传递是通过传递引用的值来实现的,可以理解为值传递,对引用本身的修改对实参是不可见的。