补充注意:
1、StringBuilder
的 append
方法可以接收整数类型的参数,并将其自动转换为字符串后添加到 StringBuilder
中
2、该方法适用于所有基本数据类型(如 long
、double
等)和对象(通过调用其 toString()
方法)
一、String 类基础
创建方式
String a = new String();
→ 创建空字符串对象(等价于""
)String b = new String("neirong");
→ 基于已有字符串创建对象(不推荐,直接用String b = "neirong";
更高效)字符串不可变性
- String 对象创建后内容不可变,所有操作(如
concat
)都会返回新字符串
二、String 常用方法
字符操作
java
char c = b.charAt(4); // 返回索引4对应的字符'r'(索引从0开始) char[] ch = str.toCharArray(); // 转换为字符数组
比较方法
java
int t = str.compareTo("code"); // 按字典序比较:相等返回0 boolean boo = str.equals("code"); // 内容比较:true
拼接与截取
java
String str1 = str.concat("sss"); // 等价于 str + "sss" → "codesss" String sub = str.substring(2, 4); // 左闭右开区间 → "de"
查找定位
java
int ind = str.indexOf("de"); // 返回子串首次出现位置:2
状态判断
java
int len = str.length(); // 返回字符串长度:4 boolean flag = str.isEmpty(); // 判断是否为空:false
三、StringBuilder 类
核心特点
- 可变字符序列,适合频繁修改场景(如循环拼接)
- 非线程安全,性能优于
StringBuffer
常用操作
java
StringBuilder stro = new StringBuilder(); stro.append("absc").append("efg"); // 链式调用 → "abscdefg" stro.reverse(); // 反转内容 → "gfedcba"
与 String 的转换
java
String s = stro.toString(); // 转换为String对象
四、关键对比
特性 String StringBuilder 可变性 不可变 可变 线程安全性 安全(不可变) 不安全 性能(循环拼接) 低(每次生成新对象) 高(直接修改内部数组) 适用场景 少量操作、常量定义 大量动态拼接
五、最佳实践
优先使用字面量创建字符串
java
String s = "hello"; // 比new String("hello")更高效
循环拼接用 StringBuilder
java
StringBuilder sb = new StringBuilder(); for (int i = 0; i < 1000; i++) {sb.append(i); // 避免使用String的+操作符 }
谨慎使用
substring
- 在 Java 8 及以前,
substring
可能导致内存泄漏(保留原字符串引用)- Java 9 + 已修复此问题(改用复制机制)
六、常见误区
compareTo
与equals
的区别
compareTo
返回比较结果的数值(-1/0/1)equals
返回布尔值
isEmpty
与null
的区别java
String s = ""; s.isEmpty(); // true s == null; // false
StringBuilder
的append
返回值java
StringBuilder sb = new StringBuilder(); sb.append("a").append("b"); // 返回当前对象,无需接收返回值
我的代码:
package day714;public class string {public static void main(String[] args) {String a=new String();String b=new String("neirong");System.out.println(a);System.out.println(b);char c=b.charAt(4);System.out.println(c);String str="code";int t=str.compareTo("code");System.out.println(t);String str1=str.concat("sss");System.out.println(str1);boolean boo=str.equals("code");System.out.println(boo);int ind=str.indexOf("de");System.out.println(ind);int len=str.length();System.out.println(len);String sub=str.substring(2,4);System.out.println(sub);char[] ch=str.toCharArray();boolean flag=str.isEmpty();System.out.println(flag);StringBuilder stro=new StringBuilder();stro.append("absc");System.out.println(stro);stro.append("efg");System.out.println(stro);StringBuilder stroo=new StringBuilder();stroo=stro.reverse();System.out.println(stroo);}
}
/*********************String 常用方法********************1、char charAt(int index);返回指定索引字符(从0)*2、int compareTo(Object o);字符串与o比较,大返回1,等0,小-1*3、String concat(String str);指定字符串链接到指定字符串的结尾*4、boolean equals(String string1);将此字符串与指定的字符串比较*5、int indexOf(String str)返回a穿再b串中第一次出现的位置*6、int length();返回此字符串的长度*7、String substring(int beginIndex,int endIndex);左闭右开*8、char[] toCharArray();//字符串转换成字符数组*9、boolean isEmpty();//判断字符串是否为空******************************************************/
/**************StringBuilder常用方法************************ StringBuilder str=new StringBuilder();* 这里要特别记清楚append()和reverse()是StringBuilder 类** 1、void append(Object obj) //尾部加上字符串obj* 2、int indexOf(String str) //同上* 3、StringBuilder reverse() //反转* 4、boolean isEmpty() //判空同上* 5、int charAt(int index) * ********************************************************/