美文网首页工作相关的整理
自整理3 值传递和引用传递

自整理3 值传递和引用传递

作者: 自话 | 来源:发表于2017-04-16 01:26 被阅读0次

    java的值传递和引用传递

    首先,由于java没有指针机制,所有java归根究底只有值传递,没有引用传递。
    java中所谓对象(数组,类,接口)的引用传递,实际上是对于该对象的地址的值传递.

    那么这里可以对String和StringBuffer的传递方式做一个推论:

    String和StringBuffer都是引用类型

    作为参数传入的时候是传递的其地址,但是如果出现赋值操作,比如String = “x”,String = new String(“xx”)
    意味着开辟新的内存空间并赋值给String,此时原来的内容的地址已被丢弃,故看上去变成修改了String的内容,但方法外面的内容却不变
    Stringbuffer的append方法本质上没有开辟新的内存空间,只是在原有空间上拓展,那么看上去就是修改内容,方法外面的内容也跟着修改了,但是实际上,你对Stringbuffer进行new的赋值的话,那么它和String就一样了。

    2018.03.20新增

    String的特殊性在这里补充一下。

    String特殊在jvm对String有专门的处理方式,如果你使用String s = new String(“xx”),那么你调用的是String类的构造方法,获得的是一个对象(存放在堆中),如果你使用String s = "xx",jvm会检查内存的常量区有没有“xx”,有则s的值实际上是“xx”的地址,如果没有,就在常量区创建一个字符串“xx”,把该字符串的地址赋值给s。

    给个解释这个情况的链接:java-字符串的创建和存储机制

    至于String为什么会出现这么麻烦的情况,下回补充。

    相关文章

      网友评论

        本文标题:自整理3 值传递和引用传递

        本文链接:https://www.haomeiwen.com/subject/aagoattx.html