定义
字符串是不变的; 它们的值在创建后无法更改。
字符串缓冲区支持可变字符串。
因为String对象是不可变的,所以可以共享它们。
对String不可变理解
String str = "123";
String str1 = "12";
int a = str1.hashCode();
//此时str1与str内容相同
str1 = str1+"3";
//对比str与str1的哈希码值
if (a == str1.hashCode()){
System.out.println(true);
}else{
System.out.println(false);
}
//对比str与更改后str1的哈希码值
if (str.hashCode() == str1.hashCode()){
System.out.println(true);
}else{
System.out.println(false);
}
//输出为:
false
true
如图:str存储位置与其内容一同变化
该处str1先运行到内容“12”在转至内容“123”,即执行str1 = “12” = “123”
public class Text {
public static void main(String[] args) {
String str = "123456";
//“5”被“ ”取代后对str本身无影响,只是对其引用进行更改
//并创建了新的内存地址
str.replace("5"," ");
System.out.println(str);
//同上,并把新内容赋予旧地址
str = str.replace("4"," ");
System.out.println(str);
}
}
//输出为:
123456
123 56
构造方法
一、方法:比较
1.compare
//按字典顺序比较两个字符串
.compareTo(String anotherString);
//同上,但忽略大小写
.compareTOIgnoreCase(String str);
String a = "XIA";
String b = "xia";
System.out.println(a.compareTo(b));
//输出为:
-32
System.out.println(a.compareToIgnoreCase(b));
//输出为:
0
2.equals
//将此字符串与指定的对象进行比较
.equals(Object anObject);
//同上,忽略大小写
.equalsIgnoreCase(String anotherString)
String a = "XIA";
String b = "xia";
System.out.println(a.equals(b));
//输出为:
false
System.out.println(a.equalsIgnoreCase(b));
//输出为:
true
3.isBlank
判断字符串是否无内容,即是否为空
//如果字符串为空或仅包含white space代码点,
//则返回true,否则false
.isBlank();
String str = "";
System.out.println(str.isBlank());
//输出为:
true
4.isEmpty
判断字符串是否为零长度,即是否为空
//返回true,当且仅当.length()是0
.isEmpty();
二、方法:操作
1.concat
//将指定的字符串连接到此字符串的末尾
//与直接相加无异
.concat(String str);
String a = "霞";
String d = "洛";
System.out.println(a.concat(d));
//输出为:
霞洛
System.out.println(a+d);
//输出为:
霞洛
2.hashCode
//返回此字符串的哈希码值
.hashCode();
String str = "霞";
System.out.println(str);
//输出为:
38686
3.intern
//返回字符串对象的规范表示
//将此字符串放入常量池中
.intern();
4.charAt
//返回指定索引位置的char值
String a.charAt(int index)
String a = "霞洛";
System.out.println(a.charAt(0));
//输出为:
霞
5.length
//返回此字符串的长度
.length();
String a[] =new String[]{"1","2","3","4","5"};
System.out.println(a.length());
//输出为:
5
String b ="最棒的你";
System.out.println(b.length());
//输出为:
4
6.repeat
//返回一个字符串,并重复count次
.repeat(int count);
String a ="哈";
System.out.println(a.repeat(3));
//输出为:
哈哈哈
7.replace
//返回从替换所有出现的导致一个字符串 oldChar在此字符串 newChar 。
.replace(char oldChar, char newChar);
//将此字符串中与文字目标序列匹配的每个子字符串替换为指定的文字替换序列。
.replace(CharSequence target, CharSequence replacement);
//将给定替换的给定 regular expression匹配的此字符串的每个子字符串替换
.replaceAll(String regex, String replacement);
//将给定替换的给定 regular expression匹配的此字符串的第一个子字符串替换。
.replaceFirst(String regex, String replacement);
String a = "你是天上一轮月,我是月边陪伴的星星,今生有幸认识你。";
String a ="你是天上一轮月,我是月边陪伴的星星,今生有幸认识你。";
//改变所有匹配与replaceAll无异
String b = a.replace("你","ni");
System.out.println(b);
//输出为:
ni是天上一轮月,我是月边陪伴的星星,今生有幸认识ni。
//只检索并改变第一个匹配值
String c = a.replaceFirst("你","ni");
System.out.println(c);
//输出为:
ni是天上一轮月,我是月边陪伴的星星,今生有幸认识你。
8.strip
//返回一个字符串,其值为此字符串,并删除了所有前导和尾随 white space
.strip();
//返回一个字符串,其值为此字符串,并删除了所有前导 white space
.stripLeading();
//返回一个字符串,其值为此字符串,并删除所有尾随 white space
.stripTrailing();
String a = " 你好! ";
System.out.println(a.strip());
//输出为:
你好!
三、方法:索引
1.indexOf
//返回指定字符第一次出现的字符串中的索引
.indexOf(int ch);
//同上,但限定开始位置
.indexOf(int ch,int fromIndex);
//返回指定子字符串第一次出现的字符串中的索引
.indexOf(String str);
//同上,从指定位置开始
.indexOf(String str,int fromIndex);
//返回指定字符最后一次出现的字符串中的索引
.lastIndexOf();
3.startWith
//测试此字符串是否以指定的前缀开头
.startsWith(String prefix);
String a ="床前明月光";
System.out.println(a.startsWith("床前"));
//输出为:
true