首先看一道经典题:
下列java程序的输出结果为__。
public class Example{
String str=new String(“hello”);
char[]ch={‘a’,’b’};
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]=’c’;
}
}
hello and cb
str=“tesk ok”
其实是隐含的让Java生成一个新的String对象,那么就与原来的“Hello”没有任何关系,当函数结束,str作用结束,所以输出的还是“Hello”。 char ch[] 是引用传递,修改了原内容。
永远记得,数组和对象都是引用传递。
call by value不会改变实际参数的数值
call by reference不能改变实际参数的参考地址
call by reference能改变实际参数的内容