- String类的特点:
字符串常量池的特点
//字符串对象一旦被初始化就不会被改变。
String s = "abc";
//此处的"abc"是一个字符串常量对象,它存放在字符串常量池中。
String s2 = "abc";
System.out.println(s==s1);
/*
这句代码的结果是true,为什么呢?是因为它们比较的是内容么?错
它们还是比较的是地址,因为"abc"存在于常量池中,所以s2创建的
时候就不用重新建立字符"abc"直接拿来用即可,所以s1和s2都指向了"abc"的地址空间,所以结果是true。
*/
String s = "abc";//创建一个字符串对象在常量池中。
String s2 = new String("abc");
//在堆里创建了两个对象,一个new的对象,一个是字符串对象。
System.out.println(s == s2);
/*
这一句的执行结果是false,因为s指向的是常量池中的"abc"对象
,而s2指向的是堆里的"abc"对象。它们两个的地址是不相同的,
*/
System.out.println(s.equals(s2));
//词句的执行结果是true,因为在String类中复写了Object类中的equals方法,其实就是比较字符串的内容而不是对象的地址。
String 几个常用的构造函数
String s1 = new String("Str");
/*初始化一个新创建的 String 对象,
使其表示一个与参数相同的字符序列;
换句话说,新创建的字符串是该参数字符串的副本。
*/
String s2 = new String();//等效于String s2 = "";
byte[] arr = {97,98,99,100};
String s3 = new String(arr);
System.out.println("s3 = "+s3);
//这个构造函数可以把byte数组变为字符串。
char[] str = {'a','w','y','z','k'};
String s4 = new String(str,0,2);
System.out.println(s);//输出为aw
String类中常用的一些方法
1.获取功能;
1.1 获取字符串中字符的个数(长度)
int length();
1.2 根据位置获取字符。
char charAt(int index)
1.3 根据字符获取在字符串中第一个出现的位置。
从前往后索引
int indexOf(int ch);
int indextOf(int ch,int fromIndex);
//从指定位置进行字符ch的查找第一次出现的位置。
int indexOf(String str);
int indexOf(String str, int fromIndex);
//根据字符串str获取在字符串中第一次出现的位置。
从后往前索引
int lastIndexOf(int ch);
int lastIndexOf(int ch,int fromIndex);
int lastIndexOf(String str);
int lastIndexOf(String str, int fromIndex);
1.4 获取字符串中的一部分字符串,也叫子串。
String subString(int beginIndex, int endIndex);
//包含begin不包含end
String subString(int beginIndex);
2.转换;
2.1 将字符串变成字符串数组(字符串的切割)
String[] split(String regex);涉及到正则表达式
2.2 将字符串变成字符数组。
char[] toCharArray();
2.3 将字符串变成字节数组。
byte[] getBytes();
2.4 将字符串中的字母转成大小写。
String toUpperCase();转大写
String toLowerCase();转小写
2.5 将字符串中的内容进行替换。
String replace(char oldChar, char newChar);
String replace(char s1, char s2);
2.6 将字符串两端的空格去除。
String trim();
2.7 将字符串进行连接。
String concat(String );
3.判断
3.1 两个字符串内容是否相同;
boolean equals(Object obj);
boolean equalsIgnoreCase(String str);忽略大写,比较字符串内容。
3.2 字符串中是否包含指定字符串。
boolean contains(String str);
3.3 字符串是否以指定字符串开头,是否以指定字符串结尾。
boolean startsWith(String);
boolean endsWith(String);
4.比较
compareTo(String str);
2 StringBuffer和StringBuilder的特点及常用方法。
2.1 StringBuffer和StringBuilder的特点。
1.它们都是字符串缓冲区,是用于存储数据的容器。
2.长度是可变的。
3.可以存储不同类型的数据。
4.最终要转成字符串。
5.可以对字符串进行修改。
2.2 StringBuffer和StringBuilder的区别。
它们两个的功能是相同的,不同的是StringBuffer是支持同步的,适用于多线程;而StringBuilder是不支持同步的,适用于单线程。
多线程StringBuffer 需要判断锁,降低了效率,提高了安全性。
单线程StringBuilder 不用判断锁,提高了效率,降低了安全性。
2.3 常用方法
1.添加:
StringBuffer append(data);
StringBuffer insert(index,data);
2.删除:
StringBuffer delete(start,end);包含头,不包含尾。
StringBuffer deleteCharAt(int index);删除指定位置的元素。
3.查找:
char charAt(index);
int indexOf(String);
int lastIndexOf(String);
4.修改:
StringBuffer replace(start,end,data);包含头不包含尾
void setChartAt(index,char);
其他 int setLength();
StringBuffer reverse();