java 值传递和引用传递

来源:互联网 发布:淘宝模特一天多少钱 编辑:程序博客网 时间:2024/06/06 16:57

值传递和引用传递

8种基本数据类型,和其扩展的引用类型,都是值传递,也就是说是将值拷贝了一份,传递下去。

除了8种基本类型和其扩展的类型之外,都是引用传递,即传递的是引用的内存地址。
String 除外,String虽然不是基本数据类型,但是铭记,如果是按照单个参数传递,他也是值传递
如:

    public static void main(String args[]){        DemoCtroller d = new DemoCtroller();        String str = "BEA";//String str = new String("BEA"); 效果一样        d.change(str);        System.out.println(str);    }    void change(String s){        s = s.replace('A', 'E');        s = s.toLowerCase();    }

最后str的结果还是BEA;

如果换成以下代码:

    String str = "BEA";    public static void main(String args[]){        DemoCtroller d = new DemoCtroller();        d.change(d);        System.out.println(d.str);    }    void change(DemoCtroller d){        d.str = d.str.replace('A', 'E');        d.str = d.str.toLowerCase();    }

最后结果就是 bee

对于基本类型,赋值运算符会直接改变变量的值,原来的值被覆盖掉。
对于引用类型,赋值运算符会改变引用种所保存的地址,原来的地址被覆盖。但是原来的对象不会改变(非常重要)。
java中没有被任何引用所指向的对象是垃圾,会被垃圾回收器回收。

演示地址:https://github.com/lichenyigit/java.learning/blob/master/src/test/java/learning/StringTest.java

参考地址:
http://blog.csdn.net/zzp_403184692/article/details/8184751
http://www.cnblogs.com/simplykk/p/3745596.html
https://www.zhihu.com/question/31203609

如果觉得文章真心好, 请打赏下我吧,程序员赚钱不容易。 十块八块不嫌多, 一块两块也是爱啊!
这里写图片描述