小弟我的java学习笔记(4)关于方法参数传递

我的java学习笔记(4)关于方法参数传递

关于方法参数传递

1.按值调用表示方法接收的是调用者提供的值。

2.按引用调用表示方法接收的是调用者提供的变量地址。

Java程序设计语言总是采用按值调用,方法不能修改传递给它的任何参数变量的内容。

很多人认为java是采用引用调用是不对的。

举个栗子:

Employee a = new Employee("a",..);

Employee b = new Employee("b",..);

swap(a,b);

方法并没有改变存储在变量a和b中的对象引用。只是交换了这两个变量的拷贝。

实际上对象引用进行的是值传递。

总结:

1.一个方法不能修改一个基本数据类型的参数,即数值型和布尔型。

2.一个方法可以改变一个对象参数的状态。

3.一个方法不能让对象参数引用一个新的对象。


实例程序1:


public class test20150325 {
	public static void main(String[] args)
	{
		System.out.println("测试 方法传值:");
		double percent = 10;
		System.out.println("调整前 percent =" + percent);
		setValue(percent);
		System.out.println("调整后 percent =" + percent);
	}
	
	public static void setValue(double x)
	{
		x = 3 * x;
		System.out.println("在这个方法中x的值为" + x);
	}
}

实例程序2:


public class test20150325002 {
	public static void main(String[] args)
	{
		System.out.println("测试 方法传值");
		Employee boy = new Employee("boy",500);
		System.out.println("修改前的薪水:" + boy.getSalary());
		setSalary(boy);
		System.out.println("修改后的薪水:" + boy.getSalary());
	}
	
	public static void setSalary(Employee x)
	{
		x.raiseSalary(300);
		System.out.println("End of method: salary = " + x.getSalary());
	}
}
	
class Employee
{
	private String name;
	private double salary;
	
	public Employee(String n,double x)
	{
		name = n;
		salary = x;
	}
	
	public double getSalary()
	{
		return salary;
	}
	
	public void raiseSalary(double p)
	{
		double raise = salary * p / 100;
		salary += raise;
	}
}

实例程序3:


public class test20150325003 {
	public static void main(String[] args)
	{
		System.out.println("测试交换引用");
		Employee a = new Employee("a" , 1000);
		Employee b = new Employee("b" , 2000);
		System.out.println("修改前:a = " +a.getName());
		System.out.println("修改前:b = " +b.getName());
		swap(a,b);
		System.out.println("修改后: a = " +a.getName());
		System.out.println("修改后: b = " +b.getName());
	}
	
	public static void swap(Employee x,Employee y)
	{
		Employee temp = x;
		x = y;
		y = temp;
		System.out.println("修改后 x = " + x.getName());
		System.out.println("修改后 y = " + y.getName());
	}
}

class Employee
{
	private String name;
	private double salary;
	
	public Employee(String n,double x)
	{
		name = n;
		salary = x;
	}
	
	public String getName()
	{
		return name;
	}
	
	public double getSalary()
	{
		return salary;
	}
	
	public void raiseSalary(double p)
	{
		double raise = salary * p / 100;
		salary += raise;
	}
}