Core Java (九) Java的方法参数

在各种程序设计语言中方法的参数有两种,分别是:值调用,引用调用。

Java程序设计语言总是采用值调用,即方法得到了所有参数值的一个拷贝

细分的话,方法参数一共两种类型:

  1. 如果参数是基本数据类型,那么传递的是一个基本数据类型的值;
  2. 如果参数是对象,那么传递的是一个对象引用的拷贝,注意不是C++中的对象引用。这个引用的拷贝和其他的拷贝一样,同时引用了一个对象。

一个方法不可能修改一个基本数据类型的参数,但是可以修改一个对象的状态。


一定要注意,Java中对对象采用的是引用的拷贝,并不是引用调用,反例如下:

测试程序:

package com.xujin;

public class Test {
	public static void main(String[] args) {
		Employee[] staff = new Employee[2];
		staff[0] = new Employee("Bob", 1000);
		staff[1] = new Employee("Jim", 2000);
		
		//doesn't work
		swap(staff[0], staff[1]);
		System.out.println(staff[0].getName());//Bob
		System.out.println(staff[1].getName());//Jim
		
		staff[0].raiseSalary(0.5);//涨50%的工资
		System.out.println(staff[0].getSalary());//1500.0
		
		System.out.println(staff[0].getId());//1
		System.out.println(staff[1].getId());//2
	}
	
	public static void swap(Employee x, Employee y){
		Employee temp = x;
		x = y;
		y = temp;
	}	
	
}

class Employee{	
	public Employee(String name, double salary){
		this.name = name;
		this.salary = salary;
		id = nextId;
		nextId++;
	}
	
	public String getName(){
		return name;
	}
	
	public double getSalary(){
		return salary;
	}
	
	public int getId(){
		return id;
	}
	
	public void setName(String name){
		this.name = name;
	}
	
	public void setSalary(double salary){
		this.salary = salary;
	}
	
	public void raiseSalary(double percent){
		this.salary *= (1 + percent);
	}
	
	private String name;
	private double salary;
	private int id;
	private static int nextId = 1;
}



你可能感兴趣的:(java,java,java)