关于String类型遗漏点与StringBuilder、StringBuffer

来源:互联网 发布:知贤装饰怎么样 编辑:程序博客网 时间:2024/06/16 01:18

1、String可以直接用字符数组赋值
如: char[] a={‘a’,’b’,’c’,’d’};
String b=new String(a);
2、String是不可变字符序列,并不是说String的值不可改变,而是在改变时原有的值不会改动,而会开辟新的空间在拷贝原值的基础上做改动。因为在String的源码里value的修饰符是final,不能修改,每次改变值都会在堆里开辟新空间新生成一个值,字符串指向新的值,这样会导致String对内存造成很大的浪费,所以推荐用StringBuilder(线程不安全,效率高)和StringBuffer(线程安全,效率低)来处理字符串。这里推荐看下Java300集55集和58集。
3、StringBuilder和StringBuffer
基本用法和String类似,大部分操作都是用append方法来增加字符串的值,初始化时两个类型会分配大小为16的空间(字符数组),当长度溢出时会自动生成调整大小后的新空间,将原字符串内容拷贝至新空间,并将字符串指向新的空间,提高了内存的利用率。

推荐多看看源码,上述内容在源码中都有很明显的描述,之前同学说过好的程序员都是要看源码的,近日有了深切体会,通过源码看来的知识远比百度来的用法更加深刻,所有的方法在源码里都有详细的描述,也有利于对内存的分析,所以真的要好好看源码啊!!!

原创粉丝点击