创建 String 对象的两种方式与区别:
方式一:直接赋值 String s1 = "hsp";
先从常量池查看是否有 "hsp" 数据空间,如果有,直接指向;如果没有则重新创建,然后指向。s1 最终指向的是常量池的空间地址
方式二:调用构造器 String s2 = new String("hsp");
先在堆中创建空间,里面维护了 value 属性,指向常量池的 hsp 空间。如果常量池没有 "hsp" ,重新创建,如果有,直接通过 value 指向。最终指向的是堆中的空间地址
字符串的特性:
String 是一个 final 类,代表不可变的字符序列
字符串是不可变的。一个字符串对象一旦被分配,期内容是不可变的
String 类的常见方法:
equals 比较内容是否相同,区分大小写
equalsIgnoreCase 忽略大小写的判断内容是否相等
length 获取字符的个数,字符串的长度
indexOf 获取字符在字符串对象中第一次出现的索引,索引从 0 开始,如果找不到,返回 -1
lastIndexOf 获取字符在字符串中最后一次出现的索引,索引从 0 开始,如果找不到,返回 -1
substring 截取指定范围的子串
toUpperCase 转换成大写
toLowerCase 转换成小写
concat 拼接字符串
replace 替换字符串中的字符
split 分割字符串
toCharArray 转换成字符数组
compareTo 比较两个字符串的大小,如果前者大,则返回正数,后者大,则返回负数,如果相等,返回 0。
format 格式字符串(%s , %d , %.2f,%c 称为占位符)
这些占位符由后面变量来替换
%s 表示后面由 字符串来替换
%d 是整数来替换
%.2f 表示使用小数来替换,替换后,只会保留小数点两位, 并且进行四舍五入的处理
%c 使用 char 类型来替换
StringBuffer 类:
基本介绍:
java.lang.StringBuffer 代表可变字符序列,可以对字符串内容进行增删
很多方法与 String 相同,但 StringBuffer 是可变长度的
StringBuffer 是一个容器。
String VS StringBuffer
String 保存的是字符串常量,里面的值不能更改,每次 String 类的更新实际上就是更改地址,效率较低。
StringBuffer 保存的是字符串变量,里面的值可以更改,每次 StringBuffer 的更新实际上可以更新内容,不用每次更新地址,效率较高
String 和 StringBuffer 相互转换 :
public class StringAndStringBuffer {
public static void main(String[] args) {
//看 String --> StringBuffer
String str = "hello tom";
//方式 1 使用构造器
//注意: 返回的才是 StringBuffer 对象,对 str 本身没有影响
StringBuffer stringBuffer = new StringBuffer(str);
//方式 2 使用的是 append 方法
StringBuffer stringBuffer1 = new StringBuffer();
stringBuffer1 = stringBuffer1.append(str);
//看看 StringBuffer ->String
StringBuffer stringBuffer3 = new StringBuffer("韩顺平教育");
//方式 1 使用 StringBuffer 提供的 toString 方法
String s = stringBuffer3.toString();
//方式 2: 使用构造器来搞定
String s1 = new String(stringBuffer3);
}
}