1.字符串的初始化方式:
常量方式 String xx = "aa" ;
对象方式 String xx = new String ("aa") ;
2.如何理解字符串的不可变性?
从内存角度解释 :当你给一个字符串重新赋值之后,老值并没有在内存中销毁,而是重新开辟一块空间存储新值
从源代码角度解释 : String类 final 其中包含的字符数组也是 final
String
被设计成不可变的主要目的是为了安全和高效
3.要注意常量初始化和对象初始化方式的区别?
首先对于String a="abc"这种初始化方式,计算机会在栈内存中分配一段存储地址,然后将“abc”存入,并且在栈中保存首地址(句柄)a, 而String b= new String("abc");这种初始化方式的话,计算机首先是在堆内存中分配存储地址,新建一个String对象,将“abc”存入堆内存,
并且在栈内存中产生一个首地址“b”指向该堆存储内存; 所以当调用a时,系统会先在栈中寻找是否存在a指向,若存在直接调用,而调用b时每一次都会在堆内存中新建对象,然后改变其首地址的指向
4.字符串的常用方法
StringBuilder StringBuffer String 区别 ?
(1)每次String拼接小字符串,每次拼接都会生成一个String对象
而StringBuilder StringBuffer 都是在原有对象直接拼接字符串
(2)StringBuilder线程非安全,拼接字符串效率高
(3)如果StringBuilder StringBuffer 被直接定义在某个方法内部,那就是线程安全的,直接使用StringBuilder即可
(4)如果StringBuilder StringBuffer 被直接定义在某个方法外部,那就是线程非安全的,直接使用StringBuffer即可
使用方式:StringBuilder .append(要拼接的字符串)