内容参考javacore10,
方法参数共有两种类型 :
• 基本数据类型• 对象引用 。
package com.wnsh.v1ch04; import com.alibaba.fastjson.JSONObject; import java.time.LocalDate; /** * @Description: Created by Administrator on 2018/4/15. */ public class Employee { private String name; private double salary; private LocalDate hireDay; public Employee(String n, double s, int year, int month, int day) { name = n; salary = s; hireDay = LocalDate.of(year, month, day); } public String getName() { return name; } public double getSalary() { return salary; } public LocalDate getHireDay() { return hireDay; } public void raiseSalary(double byPercent) { double raise = salary * byPercent / 100; salary += raise; } @Override public String toString() { return JSONObject.toJSON(this).toString(); } }
package com.wnsh.v1ch04; import org.junit.Test; import java.util.ArrayList; import java.util.List; /** * @Description: Created by Administrator on 2018/4/15. */ public class EmployeeTest { /** * 1 ) x 被初始化为 percent 值的一个拷贝 ( 也就是 10 ) * 2 ) x 被乘以 3 后等于 30。但是 percent 仍然是 10。 * 3 ) 这个方法结束之后, 参数变量X 不再使用。 * <p> * 可以看出:一个方法不可能修改一个基本数据类型的参数 */ @Test public void test1() { double percent = 10; System.out.println(percent);// 打印10.0 EmployeeTest.tripieValue(10); System.out.println(percent);// da打印10.0 } public static void tripieValue(double x) { x = 3 * x; } /** * 1 ) X 被初始化为 harry 值的拷贝, 这里是一个对象的引用 * 2 ) raiseSalary 方法应用于这个对象引用。 * x和 harry 同时引用的那个 Employee 对象的薪金提高了 200 %。 * 3 ) 方法结束后, 参数变量 x不再使用。 当然 , 对象变量 harry 继续引用那个薪金增至 3倍的雇员对象 * * 可以看出:对象引用作为参数 ,可以很容易地利用下面这个方法实现将 * 一个雇员的薪金提高两倍的操作 */ @Test public void test2() { Employee harry = new Employee("Carl Cracker", 10000, 1987, 12, 15); System.out.println(harry);//{"hireDay":"1987-12-15","name":"Carl Cracker","salary":75000.0} tripieSalary(harry); System.out.println(harry);//{"hireDay":"1987-12-15","name":"Carl Cracker","salary":225000.0} } public static void tripieSalary(Employee x) { x.raiseSalary(200); } /** * 认为 Java程序设计语言对对象采用的是引用调用是错误的 * * 下面总结一下 Java 中方法参数的使用情况 : * • 一个方法不能修改一个基本数据类型的参数 ( 即数值型或布尔型 ) 。 * • 一个方法可以改变一个对象参数的状态 。 * •一个方法不能让对象参数引用一个新的对象 */ @Test public void test3() { Employee a = new Employee("A", 10000, 1989, 12, 15); Employee b = new Employee("B", 15000, 1986, 12, 1); System.out.println(a);//{"hireDay":"1989-12-15","name":"A","salary":10000.0} System.out.println(b);//{"hireDay":"1986-12-01","name":"B","salary":15000.0} swap(a,b);//a,b并没有交换 System.out.println(a);//{"hireDay":"1989-12-15","name":"A","salary":10000.0} System.out.println(b);//{"hireDay":"1986-12-01","name":"B","salary":15000.0} swapValue(a,b);//a,b的薪水交换了 System.out.println(a);//{"hireDay":"1989-12-15","name":"A","salary":15000.0} System.out.println(b);//{"hireDay":"1986-12-01","name":"B","salary":10000.0} } public static void swap(Employee x, Employee y) { Employee temp = x; x = y; y = temp; } public static void swapValue(Employee x, Employee y){ double temp = x.getSalary(); x.setSalary(y.getSalary()); y.setSalary(temp); } @Test public void test4(){ String a = "a"; System.out.println(a);//a stringA(a); System.out.println(a);//a List<String> listB = new ArrayList<>(); listB.add(a); System.out.println("listB 0:"+listB);//listB 0:[a] listTest(listB); System.out.println("listB 1:"+listB);//listB 1:[a, b] } public static void stringA(String x){ System.out.println("before x="+x);//before x=a x = x+"b"; System.out.println("after x="+x);//after x=ab } public static void listTest(List list){ System.out.println("list 0:"+list); list.add("b"); System.out.println("list 1:"+list); } }
}总结 :
* • 一个方法不能修改一个基本数据类型的参数 ( 即数值型或布尔型 ) 。 * • 一个方法可以改变一个对象参数的状态 。 * •一个方法不能让对象参数引用一个新的对象