面试题:Java中方法的参数传递是值传递还是引用传递?
答案:值传递。
值传递:形式参数改变不会影响实际参数;
引用传递:形式传递改变会影响实际参数。
注意:Java中方法的参数传递,只有值传递,对于引用传递来说,地址值是不会改变的,但是可以改变对象的内容。
一、值传递
import java.util.Arrays;
public class Demo01 {
String name = "攀哥";
String[] chs = {"吃","喝","拉"};
public static void change(String name,String[] chs){
name = "静静";
chs[0] = "吃火锅";
}
public static void main(String[] args) {
Demo01 aa= new Demo01();
change(aa.name,aa.chs);
System.out.println(aa.name+"and"+ Arrays.toString(aa.chs));
//输出攀哥and[吃火锅, 喝, 拉]
}
}
二·、引用传递
对于基本数据类型和 String 类型来说:传递的值是具体的值;
对于引用数据类型来说:传递的值是地址值。
注意:Java中方法的参数传递,只有值传递,对于引用数据类型来说,地址值是不会改变的,但是可以改变对象中的内容。
public class Demo02 {
public static void changeNum(int num){
num = 6;
}
public static int changeNum1(int num){
num = 6;
return num;
}
public static void changePeo(Person person){
System.out.println("前:"+person);
person = new Person();
System.out.println("后:"+person);
person.say = "我想吃火锅了";
}
public static void main(String[] args) {
int num = 2;
changeNum(num);
System.out.println("修改前:"+num);
num = changeNum1(num);
System.out.println("修改后:"+num);
Person person = new Person();
System.out.println("修改前person的地址:"+person);
changePeo(person);
System.out.println("修改后person的地址:"+person);
System.out.println(person.say);
}
}
class Person{
String say = "有点饿,想吃鱼了!!!";
}
运行结果:



