值传递
敢问何为值传递?
我们通过查询百度百科知道: 值传递是指在调用函数时将实际参数复制一份传递到函数中,这样在函数中如果对参数进行修改,将不会影响到实际参数
通俗来讲,值传递就是将当前参数的值复制了一份,将复制的这一份传给了函数去操作,无论你怎么操作都不会影响参数原本的值
举栗:
public static void main(String[] args) {
/**
* java值传递--->基本数据类型
* 在调用函数时,会将实际参数复制一份副本
* 将副本传入函数进行操作,在函数体中副本的值产生变化但不会影响实际参数
*/
int number = 9;
new Demo03().add(number);
System.out.println(number);//---->9
}
public void add(int number){
number +=1;
}
引用传递
那么敢问何为引用传递?
再查百度百科:
在C++中,函数参数的传递方式有引用传递。所谓引用传递是指在调用函数时将实际参数的地址传递到函数中,那么在函数中对参数所进行的修改,将影响到实际参数。
虽说是c++,但是本质相同。我们知道引用数据类型分为两个部分分别是引用变量和对象,引用变量存放在栈中而对象则存储再堆内存中,引用变量指向堆中的一个对象。
而当我们将引用数据类型传递给函数时,所传递出去的是一份引用变量的副本,而引用变量指向堆内存中的对象,所以函数操作该副本是,其实际参数也会受到影响
public static void main(String[] args) {
Student stus = new Student("小明", 20);
change(stus);
System.out.println(stus);//引用传递传递
//--->Student{name='小红', age=20}
}
public static void change(Student student){
student.setName("小红");
}
特殊的String
引用类型中的String的值是放在常量池中,我们改变副本的值不会影响到原来的值
public static void main(String[] args) {
String temp = "贴贴";
change(temp);
System.out.println(temp);
}
public static void change(String temp){
temp = "抱抱";
}
/*输出:贴贴 */