1,首先来说的第一个问题就是一道面试题,这是我学Sting类型这一块的时候接触到的第一个面试题,印象比较深,在我刚开始去面试的时候也被问到这样一个问题。
StringBuffer和StringBuilder的区别?
StringBuffer中的方法都有:synchronized关键字修饰。表示StringBuffer在多线程环境下运行是安全的。
StringBuilder中的方法都没有:synchronized关键字修饰,表示StringBuilder在多线程环境下运行是不安全的。
StringBuffer是线程安全的。
StringBuilder是非线程安全的。
2,String中常用的构造方法
* 第一个:String s = new String("");
* 第二个:String s = ""; 最常用
* 第三个:String s = new String(char数组);
* 第四个:String s = new String(char数组,起始下标,长度);
* 第五个:String s = new String(byte数组);
* 第六个:String s = new String(byte数组,起始下标,长度)
3,StringBuilder/StringBuffer为什么是可变的呢?
StringBuffer/StringBuilder内部实际上是一个byte[]数组, 这个byte[]数组没有被final修饰,StringBuffer/StringBuilder的初始,容量是16,当存满之后会进行扩容,底层调用了数组拷贝的方法,System.arraycopy()...是这样扩容的。所以StringBuilder/StringBuffer适合于使用字符串的频繁拼接操作。
4,String中的一些基本的概念:
4.1 String不是基本数据类型,是引用数据类型
4.2Java中规定用双引号括起来的字符串从出生到死亡是不可以变得
4.3字符串都是储存在字符串常量池当中(原因:因为字符串在使用过程中非常的频繁,所以为了提高效率,所以把字符串放到方法区的字符串常量池当中)、
4.5凡是用双引号括起来的字符串在字符串常量池当中都有一份
4.6// s变量中保存的是字符串对象的内存地址。
// s引用中保存的不是"abc",是0x1111
// 而0x1111是"abc"字符串对象在“字符串常量池”当中的内存地址。
String s = "abc";
这只是我所想到这一部分,欢迎各位大神指正与补充。