String 、StringBuffer 、StringBuilder类详解
一:String类:Java API提供的 字符串处理类。
1)字符串是由多个字符组成的一串数据
2)字符串可以看成是字符数组
3)构造方法
public String(String original)把字符串数据封装成字符串对象
public String(char[] value)把字符数组的数据封装成字符串对象
public String(char[] value,int offset,int count)把字符数组中的一部分数据封装成字符
串对象
直接赋值也可以是一个对象(定义一个字符串变量)
注意:字符串是一种比较特殊的引用数据类型,直接输出字符串对象输出的是该对象中 的数据
4)String特点
通过构造方法创建字符串对象
String s = new String(“hello”);
直接赋值创建字符串对象
String s = “hello”;
*两者创建对象的区别:new的方式会在堆内存开辟一块空间存取String对象指向方法区常量池的常量。
Public class Demo02String {
Public static void main(String[] args) {
String s1 = new String("hello");
String s2 = "hello";
System.out.println("s1:"+s1);
System.out.println("s2:"+s2);
System.out.println("s1==s2:"+(s1==s2));
String s3 = "hello";
System.out.println("s1==s3:"+(s1==s3));
System.out.println("s2==s3:"+(s2==s3));
}
}
*和运算符拼接时候注意:如果一个String是由两个常量运算得到的,相当于用双引号创建出来,反之如果运算时,等号右边有一个“运算数”不为常量(即使该“运算数”是用双引号创建的常量),则得到的结果相当于new创建的一个新的String对象
String s = "a" + "b"; String t = "ab"; 以上两种创建方式,完全等价 String str1 = "abc"; String str2 = "abcd"; String str3 = "abc" + "d"; String str4 = str1 + "d"; System.out.println(str2 == str3);(true ) System.out.println(str2.equals(str3));(true) System.out.println(str2 == str4);(false) System.out.println(str2.equals(str4));(true) 5)String常用方法
判断功能方法
boolean equals(Object obj):比较字符串的内容是否相同
boolean equalsIgnoreCase(String str):比较字符串的内容是否相同,忽略大小写
boolean startsWith(String str):判断字符串对象是否以指定的 str 开头
boolean endsWith(String str):判断字符串对象是否以指定的 str 结尾
获取功能方法
int length():获取字符串的长度,其实也就是字符个数
char charAt(int index):获取指定索引处的字符
int indexOf(String str):获取 str 在字符串对象中第一次出现的索引,没有返回-1
String substring(int start):从 start 开始截取字符串到字符串结尾
String substring(int start,int end):从 start 开始,到 end 结束截取字符串;包括 start,
不包括 end
二:StringBuilder类
1)解决String方式子符串拼接时在常量池中产生过多的产量问题。
2)与String的区别:
2)与String的区别:
String 的内容是固定的, StringBuilder 的内容是可变的,内存开销小,效率高。
3)常用方法:
添加功能
public StringBuilder append(任意类型):添加数据,并返回自身对象
反转功能:实现倒序
public StringBuilder reverse()
三:String、StringBuilder、StringBuffer 的区别:
1)效率:StringBuilder > StringBuffer>String
2) String 是被final 修饰的类,是不可变类。StringBuilder和StringBuffer有公共父类(AbstractStringBuilder),有很多从父类继承共用的方法。StringBuffer是线程安全的。