版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u013234928/article/details/89416028
方法参数的值传递和引用传递的问题
先总结:
- 值传递是不会发生改变的问题
- 引用传递会发生修改对象属性的问题
因为在参数传递过程中,其实都是传递的一个副本,只不过基本数据类型传递的是字面值的副本,而引用类型传递的是对象的引用地址的副本
所以:
基本数据类型和String 都是修改的副本值,并没有修改真正的值
引用类型,也没有修改引用地址,但操作副本地址时,副本地址也指向了原来的值,所以set 方法时直接改变了原来的值
具体过程需要研究jvm 的一个执行过程。
class Person {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
public class Test {
public static void stringChange(String name, int age, Person person) {
name = "-----";
age = 10;
person.setName("-----");
person.setAge(10);
}
public static void main(String[] args) {
Person person = new Person();
person.setName("张三");
person.setAge(0);
String name = "张三";
int age = 0;
System.out.println("Person: " + person.getName() + "," + person.getAge());
System.out.println("name_age = " + name + "," + age);
System.out.println("==============================");
stringChange(name,age,person);
System.out.println("Person: " + person.getName() + "," + person.getAge());
System.out.println("name_age = " + name + "," + age);
}
}
运行结果如下:
Person: 张三,0
name_age = 张三,0
==============================
Person: -----,10
name_age = 张三,0