小弟我的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; } }