方法参数的值传递和引用传递

版权声明:本文为博主原创文章,未经博主允许不得转载。 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

猜你喜欢

转载自blog.csdn.net/u013234928/article/details/89416028