可以说两年没回顾Java基础了,今天翻出一道以前家啊vaSE的面试题,看了几个人的答案选的都是一样的错选项,先上题:
public class Test {
/**
* @param args
*/
String str=new String("good");
char[] ch={'a','b','c'};
public static void main(String[] args) {
// TODO Auto-generated method stub
Test t=new Test();
t.change(t.str,t.ch);
System.out.println(t.str+" and ");
System.out.println(t.ch);
}
public void change(String str,char[] c){
str="test ok";
ch[0]='g';
}
}
选择运行结果,选项:
A:good and abc B:good and gbc C:test ok and abc D:test ok and gbc
三个人都选的D,正确答案:B
这就是值传递和引用传递的例子了。值传递:方法调用时,实际参数把它的值传递给对应的形式参数,方法执行中形式参数值的改变不影响实际参 数的值。
引用传递:也称为传地址。方法调用时,实际参数的引用(地址,而不是参数的值)被传递给方法中相对应的形式参数,在方法执行中,对形式参数的操作实际上就是对实际参数的操作,方法执行中形式参数值的改变将会影响实际参数的值。
上面例子中str为值传递,ch为引用传递。