package test.entity; /** * 值传递测试 * @author 601162789@qq.com * 创建日期::2016年12月28日 <br/> */ public class Test { /** * 先创建一个更改变量的函数,并加上了打印的函数用于比较 */ public void change(int c) { c = c * 5; System.out.println(c); } public static void main(String[] args) { int p = 5; // 先声明一个变量p=5 Test c = new Test(); // 创建对象c c.change(p); // 利用c的成员函数改变p值,使p=p*5 System.out.print(p); // 输出的值为:25, 5 //分析:这就是按值传递的效果,因为此时传入的不是p本身,只是p代表的值,即5*5=25 //而后一个打印出的5,是由于p在该方法域内,并没有发生改变,因此结果是5 } }
package test.entity; /** * 引用传递测试 * @author 601162789@qq.com * 创建日期::2016年12月28日 <br/> */ public class Student { /** * 学生名称 */ public String name; /** * 设计重载构造函数,为了后面的演示方便 */ public Student() { } /** * 用于取名的构造函数 * @param name 传入学生姓名 */ public Student(String name) { this.name = name; } /** * 用于修改名称的成员函数 * @param s 学生对象 */ public void changName(Student s) { this.name = s.name; } public static void main(String[] args) { Student a = new Student("李明"); // 创建a这个人给a学生取名李明 Student b = new Student("赵明"); // 创建b这个人给b学生取名赵明 Student c = new Student(); // 创建c这个人,还未起名 System.out.println("a同学名字是" + a.name); // 分别输出a,b两个人的名字 System.out.println("b同学名字是" + b.name); // 分别输出a,b两个人的名字 // 将c人的名字指向b,实质是将b的地址赋给c,这样c,b同指一片内存区域 c = b; System.out.println("c同学名字是" + c.name); // c的名字变为了赵明 b.changName(a); // 利用改名函数将a的名字赋给b System.out.println("b同学名字是" + b.name); // 这时b同学名字:李明 System.out.println("c同学名字是" + c.name); // 这时c同学名字:李明 //分析:c对象的值是引用于b对象的,当b对象发生改变的时候,c对象随之发生变化 } }