• java是值传递,还是引用传递?


    原文地址:http://blog.csdn.net/zxmzfbdc/article/details/5401960

       java到底是值传递,还是引用传递?以前国内的java开发者有过很多争论,由于《Practical java》等书籍的引入,现在大家都知道java是严格的值传递,基本数据类型不会有什么问题,但是针对对象和数组,执行的结果,似乎应该是引用传递。

       在《Practical java》中,给出了说明,针对对象和数组,事实上,传递的内容,是引用的值,而不是引用本身。但是怎么验证,网上没有例子,书上也没有给,现在给出一个 例子,可以很好的说明,java确实是值传递。例子如下:

    1. public class Test{  
    2.     public void c(Model m1, Model m2){  
    3.         Model m = m1;  
    4.         m1 = m2;  
    5.         m2 = m;  
    6.     }  
    7.     public void cd(int[] a, int[] b){  
    8.         int[] c = a;  
    9.         a = b;  
    10.         b =c;  
    11.     }  
    12.     public static void main(String[] args){  
    13.         Model m1 = new Model();  
    14.         m1.setName("m1");  
    15.         Model m2 = new Model();  
    16.         m2.setName("m2");  
    17.         Test app = new Test();  
    18.         app.c(m1, m2);  
    19.         System.out.println(m1.getName()+"---" + m2.getName());  
    20.         int[] a = new int[]{1};  
    21.         int[] b = new int[]{2};  
    22.         app.cd(a, b);  
    23.         System.out.println(a[0] + "----" + b[0]);  
    24.     }  
    25. }  
    26. class Model{  
    27.     private String name;  
    28.     public void setName(String name){  
    29.         this.name = name;  
    30.     }  
    31.     public String getName(){  
    32.         return name;  
    33.     }  
    34. }  

      打印的结果是

     
    1. D:/ > java Test  
    2. m1---m2  
    3. 1----2  
     

       这是因为,m1和m2本身是对象的引用没错,但是传入方法c的参数,实际上是m1和m2的副本,因此只是两个副本进行了交换,而m1和m2本身并没有被交 换。交换数组的方法cd,原理与之相同。

  • 相关阅读:
    Getting started with the Web ADF
    将搜狗浏览器设置为IIS的默认浏览器
    What is installed with the Web ADF?
    如何修改Flex的默认浏览器
    What is the Web Application Developer Framework
    windows C++获得本地IP地址
    lua table函数库
    【铸铁】C++服务器面试题.doc
    VC2008下提示找不到MSVCP90D.dll的解决办法
    排序
  • 原文地址:https://www.cnblogs.com/m-xy/p/3224631.html
Copyright © 2020-2023  润新知