1、String类

String是一个final类,代表可变的字符序列

String对象的字符内容是存储在一个final字符数组value[]中的。
方法区(含字符串常量池)
2、string的创建
方式一:
通过字面量的方式(区别于new)给一个字符串赋值,此时的字符串值声明在字符串常量池中。字符串常量池中不会存储相同内容的字符串。
java字符串类简单介绍

方式二:使用new

在内存中创建了两个对象,一个是在堆空间new的,另一个是char【】对应的常量池中的数据。

java字符串类简单介绍

 

3、字符串拼接

java字符串类简单介绍

结论:

常量与常量的拼接结果在常量池。且常量池中不会存在相同内容的常量。
只要其中有一个是变量,结果就在堆中
如果拼接的结果调用intern()方法,返回值就在常量池中
加final的string就是常量
 
注意:函数参数是string类型是,虽然传递的是地址值,但是不能改变string的值。
4、string的转换
字符串 ->基本数据类型、包装类
例如:Integer包装类的public static int parseInt(String s)

基本数据类型、包装类 ->字符串 

调用String类的public String valueOf(int n)可将int型转换为字符串

注意:ByteShortLongFloatDouble用法类似。

字符串 -> 字符数组

public char[] toCharArray()将字符串中的全部字符存放在一个字符数组 中的方法。

字符数组 -> 字符串

String 类的构造器:String(char[]) String(char[]int offsetint length) 分别用字符数组中的全部字符和部分字符创建字符串对象。

字符串 -> 字节数组

public byte[] getBytes() 使用平台的默认字符集将此 String 编码为 byte 序列,并将结果存储到一个新的 byte 数组中。

字节数组 -> 字节串

String(byte[])通过使用平台的默认字符集解码指定的 byte 数组,构造一个新的 String

注意:字节就是纯数了.编码与解码的字符集需要一致。

5、StringBuffer

三个类底层都是使用char【】存储。

可变的字符序列,作为参数传递时,方法内部可以改变值。是线程安全的。

StringBuffer类不同于String,其对象必须使用构造器生成(使用new)。有三个构造器:

StringBuffer():初始容量为16的字符串缓冲区
StringBuffer(int size):构造指定容量的字符串缓冲区
StringBuffer(String str):将内容初始化为指定字符串内容
当添加的数据乘不下了怎么扩容:扩容为原来一倍加上2(16*2+2)。还不够的话直接用新的字符串的容量。

6、StringBuilder

可变的字符序列,作为参数传递时,方法内部可以改变值。是线程不安全的。

方法和stringbuffer类似。

三者效率:StringBuilder>StringBuffer>String

相关文章: