1、String类
String(String original):把字符串数据封装成字符串对象
String(char[] value):把字符数组的数据封装成字符串对象
String(char[] value, int index, int count):把字符数组中的一部分数据封装成字符串对象
2、String str=”hello” 和String str= new String(“hello”)的区别
String str = “hello”;这个是直接在方法区中的常量池中直接开辟空间,存放数据,将空间的地址返回给str
String str = new String(“hello”);这个是先在堆内存中申请一个内存,在将“hello”数据存放在方法区中的常量池中
整个流程如下图
所以:
String str = "hello";
String str2 = new String("hello");
str==str2 (结果为false)
==是直接比较的两个对象地址
str指向的地址为方法区中常量池中的地址,而str2是指向java堆中为new String ()开辟的一段地址
3、==
如果比较的是基本数据类型,==是比较的数据值
如果比较的是应用数据类型,==是比较的地址值
4、StringBuilder:是一个可变的字符串。字符串缓冲区类。
String和StringBuilder的区别:
String的内容是固定的
StringBuilder的内容是可变的
由于执行字符串的拼接过程,是需要在方法区中的常量池中再定义一个变量,在将新的变量地址赋给它,所有就会产生一些垃圾数据,所以要出现StringBuilder
5、StringBuilder的常见的方法
A:构造方法:
StringBuilder()
B:成员方法:
public int capacity():返回当前容量 (理论值)
public int length():返回长度(已经存储的字符个数)
public StringBuilder append(任意类型):添加数据,并返回自身对象
public StringBuilder reverse():反转功能
6、String,StringBuilder,StringBuffer三者的区别
6.1首先说运行速度,或者说是执行速度,在这方面运行速度快慢为:StringBuilder > StringBuffer > String
6.2再来说线程安全在线程安全上,StringBuilder是线程不安全的,而StringBuffer是线程安全的
如果一个StringBuffer对象在字符串缓冲区被多个线程使用时,StringBuffer中很多方法可以带有synchronized关键字,所以可以保证线程是安全的,但StringBuilder的方法则没有该关键字,所以不能保证线程安全,有可能会出现一些错误的操作。所以如果要进行的操作是多线程的,那么就要使用StringBuffer,但是在单线程的情况下,还是建议使用速度比较快的StringBuilder
7、总结
String:适用于少量的字符串操作的情况
StringBuilder:适用于单线程下在字符缓冲区进行大量操作的情况
StringBuffer:适用多线程下在字符缓冲区进行大量操作的情况