1、基本类型作为参数传递时,是传递值的拷贝,无论你怎么改变这个拷贝,原值是不会改变的
2、对象作为参数传递时,是把对象在内存中的地址拷贝了一份传给了参数。
1.1.1 参数传递图解与结论
通过上面的两段程序可以得出如下结论:
l 当调用方法时,如果传入的数值为基本数据类型(包含String类型),形式参数的改变对实际参数不影响
l 当调用方法时,如果传入的数值为引用数据类型(String类型除外),形式参数的改变对实际参数有影响
类:
class Car { //属性 String pinpai; String type; double pailiang; }
测试:
class TestCar { public static void main(String[] args) { Car car=new Car(); car.pinpai="牧马人"; car.pailiang=800; car.type="7座"; System.out.println("车的品牌为"+car.pinpai); System.out.println("车的排量为"+car.pailiang); System.out.println("车的类型为"+car.type); } }
结果:
基本类型的参数传递:
1 public class ParamTransfer { 2 public int money; 3 4 public void amethod(int i) { 5 System.out.println("方法得到的i的值:" + i); 6 i = i * 5; 7 System.out.println("方法执行语句i=i*5后i的值:" + i); 8 System.out.println("money的值:" + this.money); 9 } 10 11 public static void main(String[] args) { 12 ParamTransfer pt = new ParamTransfer(); 13 pt.money = 100; 14 pt.amethod(pt.money); 15 } 16 17 }
1 运行结果如下: 2 方法得到的i的值:100 3 方法执行语句i=i*5后i的值:500 4 money的值:100
注意对比形参i和money值的变化。这里我们把pt.money作为参数传递给amethod方法,该方法中i得到的值是100,这个我们从运行结果中可知。执行完i=i*5语句后我们发现当前对象的money属性值并没有发生改变,这就说明这里只是传了一个100数值给形参i,相当于把pt.money的值拷贝给i,i的变化并不会影响pt.money的值,仅仅是传数值。
2.引用类型的参数传递
1 class Time { 2 public int hour; 3 public int minute; 4 public int second; 5 } 6 7 public class ObjectParamTransfer { 8 Time time; 9 10 public static void main(String[] args) { 11 ObjectParamTransfer opt = new ObjectParamTransfer(); 12 opt.time = new Time(); 13 opt.time.hour = 11; 14 opt.time.minute = 22; 15 opt.time.second = 33; 16 17 System.out.println("time的属性值:"); 18 System.out.println("hour=" + opt.time.hour); 19 System.out.println("minute=" + opt.time.minute); 20 System.out.println("second=" + opt.time.second); 21 22 opt.method(opt.time);//将对象引用作为参数传递给方法method 23 //对比执行方法后的变化 24 System.out.println("执行方法后的time的属性值"); 25 System.out.println("hour=" + opt.time.hour); 26 System.out.println("minute=" + opt.time.minute); 27 System.out.println("second=" + opt.time.second); 28 29 } 30 31 private void method(Time t) { 32 System.out.println("参数t的属性值:"); 33 System.out.println("hour=" + t.hour); 34 System.out.println("minute=" + t.minute); 35 System.out.println("second=" + t.second); 36 System.out.println("对t和time进行==比较,结果为:" + (t == this.time)); 37 38 System.out.println("改变t的实例变量值"); 39 t.hour = 44; 40 t.minute = 55; 41 t.second = 60; 42 } 43 }
运行结果如下:
time的属性值:
hour=11
minute=22
second=33
参数t的属性值:
hour=11
minute=22
second=33
对t和time进行==比较,结果为:true
改变t的实例变量值
执行方法后的time的属性值:
hour=44
minute=55
second=60