------------------字符串总结-------------------

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(要拼接的字符串)   

原文地址:https://www.cnblogs.com/helloaugust/p/11561387.html