java中,参数的传递

一般情况下(例如C++),将参数传递给方法的方式有有按值调用和引用调用

  • 按值调用(call by value)表示方法接收调用者提供的数值
  • 引用调用(call by reference)表示方法接收的调用者提供的变量地址

而Java中,参数的传递方式只有按值调用

即方法得到所有参数值的一个拷贝,因此,方法不能修改传递给它的任何参数变量的内容

方法参数共有两种类型:基本数据类型(数据,布尔值),对象引用

例1:

double percent=10;

harry.raiseSalary(percent);//将percent的值传递给harry.raiseSalary(),percent的值仍是10

例2:

public static void tripleValue()
{
x=x*3;
}
//调用该方法
double percent=10;
tripleValue(percent);

将x初始化为percent的值后执行函数,调用完后参数变量的值不再使用。

例3:

对象引用作为参数,实现将雇员工资提升两倍的操作

public static void tripleSalary(Employee x)
{
x.raiseSalary(2);
}
//调用提供的参数
harry=new Employee(8000);
tripleSalary(harry);

 例4:

证明Java对对象采用的不是引用调用

交换两个雇员对象

public static void swap(Employee x,Employee y)
{
Employee temp=x;
x=y;
y=temp;
}
Employee a=new Employee("Alice");
Employee b=new Employee("Jack");
swap(a,b);

参数x,y分别被初始化为两个对象引用的拷贝,引用该方法时交换的是这两个对象的拷贝,调用方法swap结束后,参数变量x,y被丢弃,对象变量a,b仍然是这个方法调用前所引用的对象。

总结:Java中方法参数的使用情况;

1.一个方法不能修改一个基本数据类型的参数(数值型或布尔型)如例1;

2.一个可以改变一个对象参数的状态如例2,例3;

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

 

package ClassesAndProjects;
/*
 * This code demonstrates parameter passing in java
 * son.7.27.2019
 */
public class ParameterTest {

	public static void main(String[] args) {
		//Test1:方法不能修改基本数据类型的参数
		System.out.println("Test1;tripleValue:");
		double percent=10;
		System.out.println("before:persenct="+percent);
		tripleValue(percent);
		System.out.println("after:persenct="+percent);

		//test2:2.一个可以改变一个对象参数的状态
		System.out.println("\nTes2:tripleSalary:");
		Employee harry=new Employee("Harry",8000);
		System.out.println("before:Salary="+harry.getSalary());
		tripleSalary(harry);
		System.out.println("after:Salary="+harry.getSalary());
		
		//test3:一个方法不能让对象参数引用一个新的对象
		System.out.println("\nTest3:swap");
		Employee a=new Employee("Alice",7000);
		Employee b=new Employee("Jack",5000);
		System.out.println("before:a="+a.getName());
		System.out.println("before:b="+b.getName());
		swap(a,b);
		System.out.println("after:a="+a.getName());
		System.out.println("after:b="+b.getName());
	}

	public static void tripleValue(double x)
	{
		x=x*3;
		System.out.println("End of method:x="+x);
	
	}
	public static void tripleSalary(Employee x)
	{
		x.raiseSalary(200);
		System.out.println("End of method:salary="+x.getSalary());
	}
	public static void swap(Employee x,Employee y)
	{
		Employee temp=x;
		x=y;
		y=temp;
		System.out.println("End of method:x="+x.getName());
		System.out.println("End of method:y="+y.getName());
	}
	
	 static class Employee
	{
		private String name;
		private double salary;
		
		public Employee(String n,double s)
		{
			name=n;
			salary=s;
		}
		
		public String getName()
		{
			return name;
		}
		public double getSalary()
		{
			return salary;
		}
		public void raiseSalary(double byPercent)
		{
			double raise=salary*byPercent/100;
			salary+=raise;
		}
	}	
	}

 

运行结果如下:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值