当前位置: 首页 > ds >正文

7.14 Java基础|String 和StringBuilder

补充注意:

1、StringBuilder 的 append 方法可以接收整数类型的参数,并将其自动转换为字符串后添加到 StringBuilder 中

2、该方法适用于所有基本数据类型(如 longdouble 等)和对象(通过调用其 toString() 方法)

 

一、String 类基础

  1. 创建方式

    • String a = new String(); → 创建空字符串对象(等价于""
    • String b = new String("neirong"); → 基于已有字符串创建对象(不推荐,直接用String b = "neirong";更高效)
  2. 字符串不可变性

    • String 对象创建后内容不可变,所有操作(如concat)都会返回新字符串

二、String 常用方法

  1. 字符操作

    java

    char c = b.charAt(4); // 返回索引4对应的字符'r'(索引从0开始)
    char[] ch = str.toCharArray(); // 转换为字符数组
    
  2. 比较方法

    java

    int t = str.compareTo("code"); // 按字典序比较:相等返回0
    boolean boo = str.equals("code"); // 内容比较:true
    
  3. 拼接与截取

    java

    String str1 = str.concat("sss"); // 等价于 str + "sss" → "codesss"
    String sub = str.substring(2, 4); // 左闭右开区间 → "de"
    
  4. 查找定位

    java

    int ind = str.indexOf("de"); // 返回子串首次出现位置:2
    
  5. 状态判断

    java

    int len = str.length(); // 返回字符串长度:4
    boolean flag = str.isEmpty(); // 判断是否为空:false
    

三、StringBuilder 类 

  1. 核心特点

    • 可变字符序列,适合频繁修改场景(如循环拼接)
    • 非线程安全,性能优于StringBuffer
  2. 常用操作

    java

    StringBuilder stro = new StringBuilder();
    stro.append("absc").append("efg"); // 链式调用 → "abscdefg"
    stro.reverse(); // 反转内容 → "gfedcba"
    
  3. 与 String 的转换

    java

    String s = stro.toString(); // 转换为String对象
    

四、关键对比

特性StringStringBuilder
可变性不可变可变
线程安全性安全(不可变)不安全
性能(循环拼接)低(每次生成新对象)高(直接修改内部数组)
适用场景少量操作、常量定义大量动态拼接

五、最佳实践

  1. 优先使用字面量创建字符串

    java

    String s = "hello"; // 比new String("hello")更高效
    
  2. 循环拼接用 StringBuilder

    java

    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < 1000; i++) {sb.append(i); // 避免使用String的+操作符
    }
    
  3. 谨慎使用substring

    • 在 Java 8 及以前,substring可能导致内存泄漏(保留原字符串引用)
    • Java 9 + 已修复此问题(改用复制机制)

六、常见误区

  1. compareToequals的区别

    • compareTo返回比较结果的数值(-1/0/1)
    • equals返回布尔值
  2. isEmptynull的区别

    java

    String s = "";
    s.isEmpty(); // true
    s == null;   // false
    

  3. StringBuilderappend返回值

    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)	* ********************************************************/

http://www.xdnf.cn/news/15584.html

相关文章:

  • 系统思考:跨境跨界团队学习
  • Vim库函数
  • 图像修复:深度学习GLCIC神经网络实现老照片划痕修复
  • Sharding-Sphere学习专题(三)数据加密、读写分离
  • AI 临床医学课题【总结】
  • WIFI MTU含义 ,协商修改的过程案例分析
  • 《大数据技术原理与应用》实验报告三 熟悉HBase常用操作
  • 《大数据技术原理与应用》实验报告二 熟悉常用的HDFS操作
  • LeetCode|Day11|557. 反转字符串中的单词 III|Python刷题笔记
  • 理解:进程、线程、协程
  • autoware激光雷达和相机标定
  • 【ASP.NET Core】内存缓存(MemoryCache)原理、应用及常见问题解析
  • 2025 春秋杯夏季个人挑战赛 Web
  • 【解决办法】越疆Dobot CR5 桌面客户端DobotStudio Pro连不上机器人
  • docker简介
  • Java实现文件自动下载,XXL-Job定时任务中的HTTP文件下载最佳实践
  • lightgbm算法学习
  • Datawhale AI夏令营大模型 task2.1
  • ISO-IEC-IEEE 42010架构规范
  • 更改elementui 图标 css content
  • 详解从零开始实现循环神经网络(RNN)
  • 深浅拷贝以及函数缓存
  • Dubbo高阶难题:异步转同步调用链上全局透传参数的丢失问题
  • iOS App 安全加固全流程:静态 + 动态混淆对抗逆向攻击实录
  • iOS如何查看电池容量?理解系统限制与开发者级能耗调试方法
  • 内网环境自签名超长期HTTPS证书,并在Chrome中显示为安全证书
  • C#自定义控件
  • 【Python】基础语法
  • 单向链表、双向链表、栈、队列复习(7.14)
  • LSV负载均衡