JAVA中的String对象
- 1. String的特点
- 2. 创建String对象
- 3. 字符串连接效率
- 4. 常用方法
- 5. 测试常用方法
1. String的特点
字符串对象
是一个封装char[]数组的对象
字符串不可变,所谓不可变,不是值不可变,而是需要重新new出一个空间,不可以直接更改之前的数组。
2. 创建String对象
1、 如果是第一次使用字符串,java会在字符串常量池创建一个对象。
2、 再次使用相同的内容时,会直接访问常量池中存在的对象。
方式1:new String(char[])
其实字符串底层维护了一个char[]
char[] c = {'a','b','c','d'};
String s = new String(c);//堆中分配新的内存
System.out.println(s);
方式2:直接创建
常量池里直接创建对象(本质还是char[]),再次使用相同内容,会去常量池中找到已经存在的对象,不会新建。
String s2="abcd";//常量池中分配新的内存
System.out.println(s2);
System.out.println(s==s2);//地址不同
System.out.println(s.equals(s2));//内容相同
//如果使用过了就不再创建,引用存在的对象
String s3="abcd";//访问常量池中已经存在的对象
System.out.println(s3==s2);//true
3. 字符串连接效率
利用String类,在做字符串拼接的过程效率极其低下。
String s1="aaa";
String s2="bbb";
String s3="ccc";
String s4=s1+s2+s3;//字符串不可变,每次加会创建新对象,这行代码要产生右侧的5个新对象,慢
public class TT {
public static void main(String[] args) {
String s = "abcdefghijklmnopqrstuvwxyz";
String news="";//字符串是不能被修改的,拼接时,每次会创建对象,
long start = System.currentTimeMillis();
for (int i = 0; i < 100000; i++) {
news += s;
}
long end = System.currentTimeMillis();
System.out.print(end-start);/输出运行时间,很慢
}
}
4. 常用方法
length() 长度
charAt(index) 根据index查找char
lastIndexOf(str) 返回指定子字符串在此字符串中最右边出现处的索引,如果此字符串中没有这样的字符,则返回 -1。
substring()截取时含头不含尾[start,end)
equals()字符串内容是否一致
startsWith(str) 是否以指定str前缀开始
endsWith(str) 是否以指定str后缀结束
split(str) 根据指定的规则切割字符串
trim() 去除字符串两端的空格
5. 测试常用方法
import java.util.Arrays;
import java.util.Iterator;
//String的常用方法
public class TestString {
public static void main(String[] args) {
String s = "abcdefghijk";
System.out.println(s.charAt(3));//d,返回指定索引处的 char 值。
System.out.println(s.endsWith("jk"));//true,是否以指定后缀结束
String s1 = "abc";
System.out.println(s.equals(s1));//false,判断两个字符串的内容是否相同
System.out.println(s.length());//11,字符串的长度
String s2="1,2,3,4,5";
String[] strs = s2.split(",");//根据指定的规则切割字符串
System.out.println(Arrays.toString(strs));//查看数组元素
System.out.println(s2.startsWith("1,"));//true
//截取时含头不含尾[3,7)
System.out.println(s.substring(3,7));//defg
//把指定的参数转换成String类型
//把数字10转成字符串10
System.out.println(String.valueOf(10));
}
}