问:
值传递是什么呢
值传递和引用传递有什么不同呢
java采用值传递的意义何在呢
先上定义:
值传递:指在调用函数时将实际参数复制一份传递到函数中,这样在函数中如果对参数进行修改,将不会影响到实际参数。
引用传递:是指在调用函数时将实际参数的地址直接传递到函数中(的形参),那么在函数中对参数所进行的修改,将影响到实际参数
引用传递:形参为指向实参地址的指针,当对形参的指向操作时,就相当于对实参本身进行的操作。(c++中定义)
从定义中我们可以看出:
值传递是将参数的值复制了一份传递到函数中,函数中的参数接受到了这个值,对这个参数的改变跟之前的参数已经没有关系了,这两个参数分别属于不同的变量处于两个栈内存了,所以getList()方法对i的赋值对main方法中的i没有影响
上代码
public static void getList(int i){
i=2;
}
public static void main(String[] args){
int i=1;
SearchCategory.getList(i);
System.out.println(i);
}
引用传递呢在java中没这个说法,但在java中类似针对引用类型的数据的传递,也是复制引用类型变量的值,但此时的引用变量存储的只是指向堆内存存储真实值的地址,所以函数接收到的只是变量的存储地址,相当于获取了你朋友出差了,把房子给你住,给你的不是他的房子,而是他的钥匙,这个时候你对引用类型变量的操作,就像你拿着钥匙打开了朋友的大门,你干点啥,只要不复原,对你朋友肯定有影响是吧
上代码
public static void getList(List<String> names){
String[] strings = {"yang","chun","er","yong"};
for (String string : strings) {
names.add(string);
}
}
public static void main(String[] args) {
//静态方法中不能调用非静态方法和成员变量
/*Category category = new Category();
category.getNames();*/
ArrayList<String> names = new ArrayList<>();
names.add("小乔");
System.out.println(names);
getList(names);
System.out.println(names);
}
可以结合下面这个博客的图解分析看看
https://blog.csdn.net/weixin_29499829/article/details/114540186