Java:为什么String被称为不可变字符串?

很多东西,看似可变,实际上不过是是新桃换旧符罢了。


 

String可以使用 =,或 + 重新赋值。

看似一个对象在变化,实际上是丢弃了以前的对象,创建了新的String对象。

而StringBuilder 、 StringBuffer不会丢弃之前的String对象,所以称为可变字符串,StringBuffer线程安全,StringBuilder效率高。


 

测试代码:

    static void testString(){
        String str = "i love";
        System.out.println(str+"地址是:"+System.identityHashCode(str));
        str = str+" you";
        System.out.println(str+"地址是:"+System.identityHashCode(str));

        StringBuffer strBuffer =new StringBuffer("i love");
        System.out.println(strBuffer+"地址是:"+System.identityHashCode(strBuffer));
        strBuffer.append(" you");
        System.out.println(strBuffer+"地址是:"+System.identityHashCode(strBuffer));
    }

运行结果:


字符序列(CharSequence)的关系图:

 

posted @ 2022-11-09 18:20  在博客做笔记的路人甲  阅读(116)  评论(0编辑  收藏  举报