欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

java参数的传递方式 博客分类: java学习 java

程序员文章站 2024-03-19 23:36:53
...
                                      java中参数的传递方式

     java 中参数的传递方式 分为: 按值传递(基本类型作为参数的传递)  按引用传递(对象作为参数的传递)

    在这里,我觉得应该用内存模型去解释参数的传递    更为直观一些。(我就拿  Integer 做例子了,string 等同)

     首先,按值传递(基本类型作参):例子:


      public static void  main(String[] args){
             int num = 10; //  或者是 Integer num =10;
             changeTheNum(num);
             system.out.println(num);
       }
      
       public  static  void  changeTheNum(int param){
              param = 100;
        } 
      


    输出的结果: 10;

    原因分析:
                 当 int num=10;  这里相当与在栈内存中开辟出一块   A   来存放10;
                 当num 作为参数传递的时候  changeTheNum(num) ;  这时,我们将num 复制一份。  在栈内存中 开辟出 另外一块内存 B,存放num的这里复制。
                 当 param =100的时候,这里其实是是给B赋值为 100 ,当函数执行完成后,B被回收,  我们之前定义 num=10 存放在 A 内存中。   并没有任何影响。 当然 ,main 执行完毕后, A内存 也是要被回收的。
             
      接下来,按引用(址)传递 ( 对象作为参数)  例子:


      public static void  main(String[] args){
             Integer num = new  Integer(10);
             changeTheNum(num);
             system.out.println(num);
       }
      
       public  static  void  changeTheNum(Integer param){
              param = 100;
        } 
      


    输出的结果: 100;

    原因分析:
                 当   Integer num= new Integer(10);               new Integer(10)->在堆内存中开辟一块内存 D 存放 Integer(10)的 对象;   然后 在栈内存中  开辟一个 A 内存存放堆内存D的地址。num只是  内存D存放值  的一个引用。

                 当num 作为参数传递的时候  changeTheNum(num) ;  这时,我们将num 复制一份。  在栈内存中 开辟出 另外一块内存 B,存放num的这里复制 , 这里同样是D内存的地址。

                 这里,param   和   num 都是对象的引用。 都存放D内存的地址。就和c语言中的指针一样。   即:param 和num 都 指向  D的地址。

                 当 param =100的时候,相当于更改了存放在 D中的值。当changeTheNum函数执行完成后,B被回收,  我们之前定义 num存放在 A 内存中。并没有任何影响。而A指向的D存放的值  已经发生了改变。 所以输出 为100;






相关标签: java