zoukankan      html  css  js  c++  java
  • 参数传递

    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

  • 相关阅读:
    转:Unity3D的四种坐标系
    在知乎回答的一个问题:C#初学者以后往WP开发走,还是往unity3d走?哪个更有前景呢
    Unity3d 引擎原理详细介绍、Unity3D引擎架构设计
    vs2010打开vs2012的sln文件
    Unity3d不支持vistual studio2012?用vs2012打开unity c#脚本进行编码的方法。
    C#学习笔记15:字符串、文件、目录的操作方法
    C#学习笔记14:面向对象继承的特点和里氏转换
    C#学习笔记13:静态方法、方法重载和ref、out参数
    C#学习笔记12:枚举、结构、数组基础学习
    C#学习笔记11:C#中的顺序结构、分支结构、循环结构
  • 原文地址:https://www.cnblogs.com/qq1312583369/p/10258461.html
Copyright © 2011-2022 走看看