概念
值传递:(形式参数类型是基本数据类型):方法调用时,实际参数把它的值传递给对应的形式参数,形式参数只是用实际参数的值初始化自己的存储单元内容,是两个不同的存储单元,所以方法执行中形式参数值的改变不影响实际参数的值。
引用传递:(形式参数类型是引用数据类型参数):也称为传地址。方法调用时,实际参数是对象(或数组),这时实际参数与形式参数指向同一个地址,在方法执行中,对形式参数的操作实际上就是对实际参数的操作,这个结果在方法结束后被保留了下来,所以方法执行中形式参数的改变将会影响实际参数。
1、按值传递:指的是在方法调用时,传递的参数是按值的拷贝传递
public class Test {
public static void main(String args[]){
int a = 11;
Test.change(a);
System.out.println("main方法中a的值是:"+a);
}
public static int change(int a){
a = 22;
System.out.println("change方法中a的值是:"+a);
return a;
}
}
运行结果:
2、按引用传递:指的是在方法调用时,传递的参数是按引用进行传递,其实传递的引用的地址,也就是变量所对应的内存空间的地址
public class Test {
public static void main(String args[]){
Demo demo = new Demo();
demo.value = 10;
Test.change(demo);
System.out.println("main方法中demo.value的值是:"+demo.value);
}
public static void change(Demo demo){
demo.value = 20;
System.out.println("change方法中demo.value的值是:"+demo.value);
}
}
class Demo{
public int value = 0;
}
运行结果:
总结:
(1):“在Java里面参数传递都是按值传递”这句话的意思是:按值传递是传递的值的拷贝,按引用传递其实传递的是引用的地址值,所以统称按值传递。
(2):在Java里面只有基本类型和按照下面这种定义方式的String是按值传递,其它的都是按引用传递。就是直接使用双引号定义字符串方式:String str = “Demo”;
![](https://i-blog.csdnimg.cn/blog_migrate/073c53da3d97d2be8dbf3fb4bfde91fd.jpeg)