String类是java.lang包下的一个子类,使用其方法时无需导包。Java程序中的所有字符串文字(例如"abc" )都被实现为此类的实例。
“字符串常量一旦声明则不可改变,而字符串对象可以改变,但是改变的是其内存地址的指向。”例如先定义String str1=“a”;再定义String str1=“b”;此时只是str1指向的地址发生了改变,而"a"仍然在原来的地址,只是再也不能使用它了。
因为String对象是不可变的,它们可以被共享。这段话的意思是如果在程序有完全相同的字符串,则这些字符串在同一个内存中,这些字符串的名称都指向这块内存。如下图所示。
对 String 变量进行修改的时候其实都等同于生成了一个新的 String 对象。源码中,使用final关键字修饰了String类和value变量,所以,String类是不可继承的。String所表示的字符串,底层是使用一个字符数组来保存的,也就是value这个变量,此时这个变量也使用final修饰,表示String的表示的字符串是不可变的。所以,每次对 String 变量进行修改的时候其实都等同于生成了一个新的 String 对象。
由于String类的不可更改,因此直接使用String类对字符串进行修改、拼接等操作的过程中,JVM会不断的进行创建、回收对象操作,会导致速度变慢。
String类中包含了大量的对字符串进行操作的方法,这里总结了一部分供参考。
二、StringBuffer类public char charAt(); 返回指定索引处的char值
public int codePintAt(int index);返回指定索引处的字符的asc码表值
public int codePointBefore(int index); 返回指定索引前一个字符的asc码表值,传入0则会报异常
public int lastIndexOf(int ch); 传入指定字符的asc码表值,返回其最后一次在字符串中出现的索引
public int length(); 返回字符串的长度
public String replace(char oldChar, char newChar);将字符串中指定的字符替换为新的字符并返回修改后的新字符串
public String[] split(String regex); 将字符串按照某个字符串剪切并返回一个字符串数组
public String trim(String str); 删去给定字符串的开头和末尾的空格(如果存在)并返回新的字符串
public String toLowerCase(String str); 将字符串中大写字母全变为小写并返回
public String toUpperCase(String str); 将字符串中小写字母全变为大写并返回
public String subSequence(int beginIndex, int endIndex); 剪切出指定位置的子字符串并返回
public char[] toCharArray(); 将字符串转换为新的字符数组.
public boolean startsWith(String prefix); 判断此字符串是否以指定字符串开头
public boolean endsWith(String prefix); 判断此字符串是否以指定字符串结尾
public String valueOf();此方法包含大量的重载,可以将任意基本数据类型数据传入并转换为字符串形式并返回
StringBuffer是线程安全、可变的字符序列。由于原码中增加了锁机制,其可以安全的被多个线程使用。StringBuffer类是字符串变量,当使用apend()等操作时,内存地址不发生变化。因此,涉及到字符串的修改操作时,应该用到StringBuffer类或者StringBuilder类。
因为方法被上锁,所以StringBuffer的性能一般会比StringBuilder差,单线程中建议使用StringBuilder。
操作StringBuffer类是直接对其内容的改变,并不会改变其指向的地址值。
-
SringBuffer类向String类转化
调用StringBuffer类中的toString方法
-
Sring类向StringBuffer类转化
构造StringBuffer类对象的时候传入待转化的String类字符串。
StringBuffer sb = new StringBuffer(String str)
StringBuffer类常用方法
三、StringBuilder类public StringBuffer apend();可以在括号中传入任意内容,就会加到字符串的后面并返回,
public StringBuffer insert(int offset, 插入内容);插入方法,在指定索引处插入任意基本数据类型或者String类型。
StringBuilder类与StringBuffer类具有通用的作用,但是区别在于StringBuilder类被设计用于单个线程使用的地方。因此在多线程的地方使用StringBuilder类可能造成线程不安全。如果需要同步,建议使用StringBuffer类。
多线程线程使用的地方。因此在多线程的地方使用StringBuilder类可能造成线程不安全。如果需要同步,建议使用StringBuffer类。
StringBuilder的方法与StringBuffer的方法类似,这里不再赘述。



