参数传递

 

结论测试

 

一、基本类型做为参数传递时,是传递值的拷贝,不管你怎么改变这个拷贝,原值是不会改变的this

 

二、对象做为参数传递时,是把对象在内存中的地址拷贝了一份传给了参数。spa

 

1.1.1      参数传递图解与结论

经过上面的两段程序能够得出以下结论:code

l  当调用方法时,若是传入的数值为基本数据类型(包含String类型),形式参数的改变对实际参数不影响对象

l  当调用方法时,若是传入的数值为引用数据类型(String类型除外),形式参数的改变对实际参数有影响blog

 

 

 

类:内存

1 class  Car
2 {
3     //属性
4     String pinpai;
5     String type;
6     double pailiang;
7 }

测试:class

 1 class TestCar 
 2 {
 3     public static void main(String[] args) 
 4     {
 5         Car car=new Car();
 6         car.pinpai="牧马人";
 7         car.pailiang=800;
 8         car.type="7座";
 9         System.out.println("车的品牌为"+car.pinpai);
10         System.out.println("车的排量为"+car.pailiang);
11         System.out.println("车的类型为"+car.type);
12     }
13 }

 结果:变量

基本类型的参数传递:数据类型

 1  1 public class ParamTransfer {
 2  2     public int money;
 3  3     
 4  4     public void amethod(int i) {
 5  5         System.out.println("方法获得的i的值:" + i);
 6  6         i = i * 5;
 7  7         System.out.println("方法执行语句i=i*5后i的值:" + i);
 8  8         System.out.println("money的值:" + this.money);
 9  9     }
10 10 
11 11     public static void main(String[] args) {
12 12         ParamTransfer pt = new ParamTransfer();
13 13         pt.money = 100;
14 14         pt.amethod(pt.money);
15 15     }
16 16 
17 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  1 class Time {
 2  2     public int hour;
 3  3     public int minute;
 4  4     public int second;
 5  5 }
 6  6 
 7  7 public class ObjectParamTransfer {
 8  8     Time time;
 9  9 
10 10     public static void main(String[] args) {
11 11         ObjectParamTransfer opt = new ObjectParamTransfer();
12 12         opt.time = new Time();
13 13         opt.time.hour = 11;
14 14         opt.time.minute = 22;
15 15         opt.time.second = 33;
16 16 
17 17         System.out.println("time的属性值:");
18 18         System.out.println("hour=" + opt.time.hour);
19 19         System.out.println("minute=" + opt.time.minute);
20 20         System.out.println("second=" + opt.time.second);
21 21 
22 22         opt.method(opt.time);//将对象引用做为参数传递给方法method
23 23         //对比执行方法后的变化
24 24         System.out.println("执行方法后的time的属性值");
25 25         System.out.println("hour=" + opt.time.hour);
26 26         System.out.println("minute=" + opt.time.minute);
27 27         System.out.println("second=" + opt.time.second);
28 28 
29 29     }
30 30 
31 31     private void method(Time t) {
32 32         System.out.println("参数t的属性值:");
33 33         System.out.println("hour=" + t.hour);
34 34         System.out.println("minute=" + t.minute);
35 35         System.out.println("second=" + t.second);
36 36         System.out.println("对t和time进行==比较,结果为:" + (t == this.time));
37 37 
38 38         System.out.println("改变t的实例变量值");
39 39         t.hour = 44;
40 40         t.minute = 55;
41 41         t.second = 60;
42 42     }
43 43 }
 1 运行结果以下:
 2 time的属性值:
 3 hour=11
 4 minute=22
 5 second=33
 6 参数t的属性值:
 7 hour=11
 8 minute=22
 9 second=33
10 对t和time进行==比较,结果为:true
11 改变t的实例变量值
12 执行方法后的time的属性值:
13 hour=44
14 minute=55
15 second=60
相关文章
相关标签/搜索