String类
String类
java.lang是核心包,不需要额外导入
java程序中,所有用双引号的字符串,都是String类的对象。
字符串不可变,它们的值在创建后不能更改。
常见的构造器
- public String()
- public String(char[] chs);
- public String(String original); 实际上创建了两个字符串对象
- String s = “abc”;
String类比较特殊,打印其对象名的时候,不会出现内存地址。
创建字符串对象的区别对比
以“ ”方式创建的字符串,只要字符串相同,多次创建,内存中只有一个。存储在字符串常量池中(从jdk1.7后,字符串常量池放在了堆内存中)
new创建的方式,多次创建,不管字符串是否相同,内存中有多份,指向不同的地址。
在字符串之间使用+号拼接,系统底层会自动创建一个StringBuilder对象,然后再调用其append()方法完成拼接,拼接后再调用toString()方法转换为String类型
String str1 = "abc";
String str2 = "ab";
String str3 = str2 + "c";
System.out.println(str1 == str3); //输出false str3指向的堆内存中开辟的空间,不是字符串常量池
String s4 = "a" + "b" + "c";
System.out.println(str1 == s4); //输出的是true,Java常量优化,编译时将"a" + "b" + "c"变成"abc"
字符串比较内容
equals(), equalsIgnoreCase()
遍历字符串
public char charAt(int index): 返回指定索引的char值。
public int length(): 返回字符串的长度
方法二:public char[] toCharArray(): 将当前字符串拆分为字符数组返回
字符串的截取
String substring(int beginIndex);
String substring(int beginIndex, int endIndex);
字符串的替换
String replace(CharSequence target, CharSequence replacement);
String s = replace("TMD", "***"); //将TMD替换为***
切割字符串
String[] split(String regex): 根据传入的字符串作为规则进行切割,将切割后的内容存入字符串数组中