参数传递

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

原文地址:https://www.cnblogs.com/qq1312583369/p/10258461.html