**
Java是引用传递还是值传递
**
概念
-
引用传递(pass by reference)
再调用方法时,将实际的参数地址直接船吊方法中,方法对于参数的修改将会直接影响到实际参数
-
值传递)(pass by value)
再调用方法时,将实际参数拷贝一份到方法中,即使方法对参数进行修改,也不会对实际参数产生影响
结论
直接先将结论讲出来,很多人单纯的讲Java就是值传递,从某种意义上来说,没错,但是又不全对,如果有学过c语言指针基础的同学我想这部分知识可以说是索然无味
- 在传递基础类型时,采用的为值传递
- 在传递引用类型时,采用的是引用传递
ps:基础 类型只有大家熟悉的八种,除此之外,全部采用的为引用传递
理解:基础类型直接存储在Java的栈中,直接讲数值储存于此,当该变量被调用时,直接复制一份即可,即使对引用的变量进行了修改,也不影响初始变量
在传递引用类型时,将会首先访问栈内存,栈内存存储的是一个地址信息,指向的是堆内存,当我们对储存在堆内存的信息进行修改时,即是对其原始数据进行修改
代码实现-基本类型参数为值传递
package com.shut.test;
/**
* @author chenxu
* @date 2020/10/22 - 18:13
*/
public class A1 {//java 值传递经典案例
public void changeString(String name){
name=name+"wwww";
}
public void changeAge(int age){
age=age+6;
System.out.println(age);//此处输出的是16
}
public void test(){
int tt=10;
changeAge(tt);
System.out.println(tt);//此处输出的为10
//可以理解为此处,我在changeAge中输出的值为一个copy份
//只是将tt=10.这个10给他了。而不是将tt本身给他了
}
public static void main(String[] args) {
A1 a1=new A1();
a1.test();
}
}
代码实现
package com.shut.test;
/**
* @author chenxu
* @date 2020/10/22 - 22:05
*/
public class UserTest {
public void test(){
User user=new User();
change(user);
user.setAge(88);//change和set方法谁最后执行,那么此处输出的就是哪一个方法改变后的值,因为方法修改的为数据本身
System.out.println(user.getAge());
}
public static void main(String[] args) {
UserTest userTest=new UserTest();
userTest.test();
}
public void change(User user){
//user=new User();
user.setAge(19);
}
}
水平有限,如有错误,请多指正!