概念
值传递:是将实参的值赋值给形参
引用传递:将实参(变量)的值(地址)赋值给形参(副本)
故,归根结底来说,java其实就只有值传递这一种方式,形参会被初始化为实参的副本。
引用传递:
举例
值传递
public static void main(String[] args) {
int a = 10,b =20;
swap(a,b);
//a依旧为10,b为20
}
static void swap(int x, int y){
int t =x;
x = y;
y = t;
}
引用传递(值传递)
public static void main(String[] args) {
int[] a = {10,20,30};
change(a);
//a[1] = 30
//x创建一个副本变量,指向变量a指向的地址
}
static void change(int[] x){
//变量x指向数组地址,对该地址内的数据进行修改
x[1] = 30;
}
public static void main(String[] args) {
Integer a = 10,b =20;
swap(a,b);
//a依旧为10,b为20
//创建副本x,y变量,分别指向a,b指向的地址
String s = "lzw";
change(s); //此处的s仍为lzw,而不是Lee
//因为传过去的是保存 s变量的值 的副本变量,副本的值为"lzw"的地址值
//在函数中将副本变量的值改为了"Lee"的地址值
//但不会影响到实参变量s的值
}
static void swap(Integer x, Integer y){
// 只是交换变量x,y指向的地址
//对地址本身的内容并没有修改
Integer t =x;
x = y;
y = t;
}
static void change(String s){
//只是修改了副本变量的值
//并没有修改实参s的值
s = "Lee";
}
总结
java其实就只有值传递这一种方式,即形参创建实参对应的副本数据。
1)不能通过方法传递,修改基本类型的数据
2)不能通过方法传递,让原对象变量指向另外的一个地址
3)可以修改原对象指向地址内的内容