• 实习第二天-java参数传递-精华在文章最后2句话


    对于基本类型的传递,我们很容易理解,而对于对象,总让人感觉是按引用传递,看下面的程序:

    public class ObjectRef { //基本类型的参数传递

        public static void testBasicType(int m) {

            System.out.println("m=" + m);//m=50

            m = 100;

            System.out.println("m=" + m);//m=100

        }

        //参数为对象,不改变引用的值 ??????

        public static void add(StringBuffer s) {  //change方法

            s.append("_add");

        }

    test类里面的:

    ————————————————————————————————————————————

       StringBuffer sMain = new StringBuffer("init");

            System.out.println("sMain=" + sMain.toString());//sMain=init

            add(sMain); 

    System.out.println("sMain=" + sMain.toString());//sMain=init_add

    //传递进去引用变量;相当于C++中引用传递一样,被调用方法里面改变了,外面也相应地改变了

            changeRef(sMain);

            System.out.println("sMain=" + sMain.toString());//sMain=init_add

    ——————————————————————————————————————————————————

        //参数为对象,改变引用的值 ?????

        public static void changeRef(StringBuffer s) { //changeRef方法

            s = new StringBuffer("Java");

        }

       

        public static void main(String[] args) {

            int i = 50;

            testBasicType(i);

            System.out.println(i);//i=50

            StringBuffer sMain = new StringBuffer("init");

            System.out.println("sMain=" + sMain.toString());//sMain=init

            add(sMain);

            System.out.println("sMain=" + sMain.toString());//sMain=init_add

            changeRef(sMain);

            System.out.println("sMain=" + sMain.toString());//sMain=init_add

        }

    }

    以上程序的允许结果显示出,testBasicType方法的参数是基本类型,尽管参数m的值发生改变,但并不影响i。

          add方法的参数是一个对象,当把sMain传给参数s时,s得到的是sMain的拷贝,所以s和sMain指向同一个对象,因此,使用s操作影响的其实就是sMain指向的对象,故调用add方法后,sMain指向的对象的内容发生了改变。(好好好)

          在changeRef方法中,参数也是对象,当把sMain传给参数s时,s得到的是sMain的拷贝,但与add方法不同的是,在方法体内改变了s指向的对象(也就是s指向了别的对象,牵着气球的绳子换气球了),

    s重新赋值后,ssMain已经毫无关联,(两个有了不同的指向)它和sMain指向了不同的对象,所以不管对s做什么操作,都不会影响sMain指向的对象,故调用changeRef方法前后sMain指向的对象内容并未发生改变

    (精华精华精华上面那句话)

    对于add方法的调用结果,可能很多人会有这种感觉:这不明明是按引用传递吗?对于这种问题,还是套用Bruce Eckel的话:这依赖于你如何看待引用,最终你会明白,这个争论并没那么重要。真正重要的是,你要理解,传引用使得(调用者的)对象的修改变得不可预期。

  • 相关阅读:
    python 函数
    python升级功能
    python3与c++的不同点(初学看重点~)
    python中的数据结构
    github超简单用法
    ListView
    线性代数(1)--方程组的同解变形
    C++基础学习
    C++多态
    PKU《程序设计》专项课程_递归汉诺塔问题
  • 原文地址:https://www.cnblogs.com/cs-lcy/p/6613525.html
Copyright © 2020-2023  润新知