java值传递与引用传递

这个问题相对于函数而言,即方法参数。在java中是没有传址调用的,这里我们需要注意的是一个方法可以修改传递引用所对应的变量值,而不能修改传递值调用所对应的变量值,这句话相当重要,这是按值调用与引用调用的根本区别。

案例分析:

package com.yc.test;
public class User {
	public String name;
	public 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 User() {
		super();
		// TODO Auto-generated constructor stub
	}
	public User(String name, int age) {
		super();
		this.name = name;
		this.age = age;
	}
	@Override
	public String toString() {
		return "User [name=" + name + ", age=" + age + "]";
	}
}
package com.yc.test;
import org.junit.Test;
import junit.framework.TestCase;
public class TestProject extends TestCase {
	public int a=10;
	public User user=new User("张三",18);
	
	public void add(int a,User student){
		a=a+10;
		student.setAge(20);
		student.setName("李四");
	}
	
	@Test
	public void test1(){
		System.out.println("执行方法前a:"+a+"\t"+user);
		add(a,user);
		System.out.println("执行方法后a:"+a+"\t"+user);		
	}

}

运行结果:

执行方法前a:10	User [name=张三, age=18]
执行方法后a:10	User [name=李四, age=20]

由于参数是按值传递,方法参数类型有基本类型和引用类型,对于基本类型,在方法中改变参数值,不会改变原有变量的值;

对于引用变量则会改变引用所指向对象的状态。在这个案例当中,执行方法add时会将全局变量a的值,实例变量user的值拷贝给方法参数的a、student,对于方法中的a当方法执行结束就会销毁,原来a的值不变;对于student与user是一个对象引用,都指向堆内存的对象,所以当在方法改变对象状态的时候,user也会受到影响。

猜你喜欢

转载自blog.csdn.net/qq_40693828/article/details/81811053