一.实例化
补充:""括起来的如果字符串常量串中没有,则会新建一个
1.直接赋值
String s="abc";(会指向字符串常量池中的对象)
2.new
String s=new String("abc")(一定会在堆中新开辟一片空间)
String s=new String("abc").intern(在字符串中找,如果没有则把堆中对象放到字符串常量 池中)
public class Main {
public static void main(String[] args) {
//字符串常量池中已有对象,不会新建,所以地址一样;
String a="abc";
String b="abc";
System.out.println(a==b);
//new 一定会新开辟一片内存;
String c=new String("ccc");
String d="ccc";
System.out.println(c==d);
// s2.intern() 返回的是字符串常量池中 "abc" 的引用
String e = "abc";
String f = new String("abc").intern();
System.out.println(e==f);
}
}
二.常用方法
查询
length(): 返回字符串的长度。
charAt(int index): 返回指定索引处的字符。
indexOf(String str): 返回指定子字符串在此字符串中第一次出现处的索引。
lastIndexOf(String str): 返回指定子字符串在此字符串中最右边出现处的索引。
startsWith(String prefix): 判断字符串是否以指定的前缀开始。
endsWith(String suffix): 判断字符串是否以指定的后缀结束。
contains(CharSequence s): 判断字符串是否包含指定的字符序列。
比较
equals(Object anObject): 比较两个字符串的内容是否相同。
equalsIgnoreCase(String anotherString): 忽略大小写,比较两个字符串的内容是否相同。
compareTo(String anotherString): 按照字典顺序比较两个字符串。
操作
substring(int beginIndex): 返回一个新字符串,它是此字符串的从 beginIndex 开始截取到最后的一个子字符串。
substring(int beginIndex, int endIndex): 返回一个新字符串,它是此字符串的从 beginIndex 开始截取到 endIndex-1 的一个子字符串。
concat(String str): 将指定的字符串连接到该字符串的末尾。
replace(char oldChar, char newChar): 返回一个新的字符串,它是通过用 newChar 替换此字符串中所有出现的 oldChar 得到的。
trim(): 返回一个新字符串,它删除了原始字符串头部和尾部的空白。
转换
toUpperCase(): 将所有字符转换为大写。
toLowerCase(): 将所有字符转换为小写。
toString(): 返回此字符串对象本身(String 类已经覆盖了 Object 类的 toString 方法)。
分割
split(String regex): 根据匹配给定的正则表达式来拆分此字符串。
其他
isEmpty(): 判断字符串是否为空。
join(CharSequence delimiter, CharSequence... elements): 静态方法,返回一个新的字符串,由指定的字符串数组 elements 通过指定的分隔符 delimiter 连接而成。
三、StringBuilder和StringBuffer
StringBuilder:
StringBuilder是Java 5中引入的,它不是线程安全的。
由于它不是线程安全的,所以在单线程环境下,StringBuilder通常比StringBuffer性能更好。
当只在单个线程中使用字符串缓冲区时,建议使用StringBuilder。
StringBuffer:
StringBuffer是Java语言早期版本中就存在的,它是线程安全的。
为了保证线程安全,StringBuffer的大多数方法都使用了同步机制,因此在多线程环境下使用StringBuffer是安全的。
由于线程安全的同步机制,StringBuffer的性能通常不如StringBuilder。
选择使用哪一个,取决于您的具体应用场景。如果您在单线程环境中操作字符串,那么StringBuilder是更好的选择;如果您在多线程环境中操作字符串,那么为了保证线程安全,应该使用StringBuffer。