参考文文章:https://zhuanlan.zhihu.com/p/388486387
总结:
1、 java 中只存在值传递,对于 基本类型、引用类型以及对象类型均是如此,因此调用了一个对某个传递过来的参数进行赋值操作的时候,均不会影响原来的值。
2 、对于对象类型,若直接修改了它的具体属性,当出现在调用方法之后,会发生改变的原因是:在 java 中,对象类型的值是对象引用,在调用过程中,传递的是一份对象引用的拷贝进行传递的,但是原引用和拷贝的引用依旧指向的是堆中的同一份值,因此,这份值做了改变,原来的 对象类型本身就发生了变化。
public class Main7 {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("1");
setValue(list);
System.out.println(list);
}
public static void setValue(List<String> list){
list = null;
}
}
// 结果还是 [1],并没有被置为null