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”数据存放在方法区中的常量池中

整个流程如下图

javase-----(6)常见API注意点

 

所以:

String str = "hello";

String str2 = new String("hello");

str==str2  (结果为false) 

==是直接比较的两个对象地址

str指向的地址为方法区中常量池中的地址,而str2是指向java堆中为new String ()开辟的一段地址

 

 

3、==

如果比较的是基本数据类型,==是比较的数据值

如果比较的是应用数据类型,==是比较的地址值

 

4、StringBuilder:是一个可变的字符串。字符串缓冲区类。  

String和StringBuilder的区别:

String的内容是固定的

StringBuilder的内容是可变的

javase-----(6)常见API注意点

由于执行字符串的拼接过程,是需要在方法区中的常量池中再定义一个变量,在将新的变量地址赋给它,所有就会产生一些垃圾数据,所以要出现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:适用多线程下在字符缓冲区进行大量操作的情况

相关文章: