补充注意:

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.pswp.cn/diannao/91133.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/91133.shtml
英文地址,请注明出处:http://en.pswp.cn/diannao/91133.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

React 第六十九节 Router中renderMatches的使用详解及注意事项

前言 renderMatches 是 React Router 的一个高级实用函数&#xff0c;用于根据路由匹配结果渲染对应的组件树。它提供了对路由渲染过程的底层控制能力&#xff0c;特别适用于自定义路由渲染逻辑的场景。 一、基本概念和功能 renderMatches 函数的作用是将路由匹配结果转换为 Re…

esp8266-01S实现PPM波形

esp8266-01虽然小众&#xff0c;但是功能可不能少。因航模需要让ESP8266-01生成PPM波形。#include <ESP8266WiFi.h> #include <Ticker.h> // 仅用于延时函数替代#define PPM_PIN 2 // 使用 GPIO2 (需断开串口上传时的连接) #define CHANNELS 4 // PPM通道数量…

使用 pytest 测试框架构建自动化测试套件之一

pytest 是一个非常灵活且强大的测试框架&#xff0c;它支持简单的单元测试到复杂的功能测试。显著特点是其简洁的语法&#xff0c;可以无需继承 TestCase 类直接使用函数来编写测试用例&#xff0c;并通过 assert语句 进行断言。还支持参数化测试、丰富的插件系统。 pytest自动…

nacos docker 配置

docker.io/nacos 项目中国可用镜像列表 | 高速可靠的 Docker 镜像资源 1、Docker 拉取镜像 docker pull nacos/nacos-server:v2.1.0 2、创建宿主机挂载目录 mkdir -p /mydata/nacos/logs/ mkdir -p /mydata/nacos/conf/ AI写代码 3、启动nacos并复制文件到宿主机&#xff0…

Django 模板(Template)

1. 模板简介 作为 Web 开发框架,Django 提供了模板,可以很便利的动态生成 HTML。模版系统致力于表达外观,而不是程序逻辑。 模板的设计实现了业务逻辑(view)与显示内容(template)的分离,一个视图可以使用任意一个模板,一个模板可以供多个视图使用。 模板包含: HTM…

Word 文字编辑状态下按回车换行后是非正文格式

在Word里编辑时&#xff0c;按回车后新段落突然变成标题1、标题2这类格式&#xff0c;不再是正文样式&#xff0c;这通常是因为「正文」的样式设置出了问题——可能被默认设置成“后续段落自动应用标题1/标题2格式”了。 修改方法很简单&#xff1a; 找到并打开「正文」样式的修…

PySide6 UI 灵活性:QToolBar 的浮动与停靠及 QSplitter 的可调整面板

PySide6 UI 灵活性&#xff1a;QToolBar 的浮动与停靠及 QSplitter 的可调整面板 在现代桌面应用程序开发中&#xff0c;提供灵活且用户友好的界面至关重要。PySide6&#xff08;Qt for Python&#xff09;提供了强大的工具来构建这样的界面。本文将深入探讨两个关键的 PySide6…

B4016 树的直径

B4016 树的直径 - 洛谷 题目描述 给定一棵 n 个结点的树&#xff0c;树没有边权。请求出树的直径是多少&#xff0c;即树上最长的不重复经过一个点的路径长度是多少。 输入格式 第一行输入一个正整数 n&#xff0c;表示结点个数。 第二行开始&#xff0c;往下一共 n - 1 行…

【一维 前缀和+差分】

一、一维前缀和 1.1 定义 给定一个数组 a[1..n]&#xff0c;其前缀和数组 pre[1..n] 定义为&#xff1a; pre[i]a[1]a[2]⋯a[i] pre[i] a[1] a[2] \dots a[i] pre[i]a[1]a[2]⋯a[i] 即 pre[i] 表示原数组从第 1 项到第 i 项的和。 1.2 构建 int a[N], pre[N]; for (int i …

Spring Boot 双数据源配置

文章目录什么是双数据源&#xff1f;为什么需要双数据源&#xff1f;核心实现原理完整示例注意什么是双数据源&#xff1f; 双数据源是指在一个应用程序中同时配置和使用两个不同的数据库连接。比如&#xff1a; 一个连接订单数据库&#xff0c;处理业务数据一个连接用户中心…

【Java】【力扣】102.二叉树层序遍历

思路一个辅助队列&#xff08;初始化队列&#xff1a;根节点入队&#xff09;一个节点 出队&#xff0c;他的左右孩子入队循环 直到队列为空举例代码public List<List<Integer>> levelOrder(TreeNode root) {if (rootnull){return new ArrayList<List<Intege…

为什么有些PDF无法复制文字?原理分析与解决方案

在日常办公和学习中&#xff0c;我们经常会从PDF文件中复制文字&#xff0c;用于编辑、引用、整理笔记。但你是否也遇到过这样的情况&#xff1a;有些PDF中的文字根本无法选中&#xff0c;更无法复制粘贴&#xff1f; 看起来像是“文字”&#xff0c;但操作上却完全无效——这…

LabVIEW浏览器ActiveX事件交互

​程序围绕 WebBrowser ActiveX 控件&#xff0c;借 “Reg Event Callback” 注册标题变更回调&#xff0c;“Callback - Title Change.vi” 处理标题数据&#xff0c;“Monitor...” 响应 URL 变更&#xff0c;“Unregister...” 清理资源&#xff0c;实现浏览器事件交互与管控…

C++后端面试八股文

一、C 语言基础与底层原理请解释 new / delete 和 malloc / free 的区别和联系&#xff0c;以及使用它们时需要注意什么new 和 delete 是C的​​运算符&#xff08;Operator&#xff09;​​。这意味着它们可以被类&#xff08;通过 operator new 和 operator delete&#xff0…

基础分类模型及回归简介(一)

一、先搞懂两个核心任务&#xff1a;分类和回归咱们生活中总遇到要 “判断” 或 “预测” 的事&#xff1a;比如看到一个水果&#xff0c;判断是苹果还是橘子 —— 这就是分类&#xff08;结果是 “类别”&#xff09;&#xff1b;比如根据西瓜的大小、颜色&#xff0c;猜它能卖…

【LeetCode 热题 100】114. 二叉树展开为链表——(解法二)分治

Problem: 114. 二叉树展开为链表 给你二叉树的根结点 root &#xff0c;请你将它展开为一个单链表&#xff1a; 展开后的单链表应该同样使用 TreeNode &#xff0c;其中 right 子指针指向链表中下一个结点&#xff0c;而左子指针始终为 null 。 展开后的单链表应该与二叉树 先序…

【WPF】WPF 自定义控件 实战详解,含命令实现

&#x1f9e9;《WPF 自定义控件》实战详解本文将围绕如何编写一个自定义控件&#xff08;如带右键菜单的图片控件 ImageView&#xff09;&#xff0c;逐步讲解其定义、命令绑定与 ContextMenu 中常见的语法技巧。&#x1f9f1; 一、创建一个 WPF 自定义控件的步骤 WPF 中自定义…

Flink 2.0 DataStream算子全景

在实时流处理中&#xff0c;Apache Flink的DataStream API算子是构建流处理 pipeline 的基础单元。本文基于Flink 2.0&#xff0c;聚焦算子的核心概念、分类及高级特性。 一、算子核心概念&#xff1a;流处理的"原子操作 1. 数据流拓扑&#xff08;Stream Topology&#x…

Flask 入门到实战(2):使用 SQLAlchemy 打造可持久化的数据层

Flask 入门到实战&#xff1a;使用 SQLAlchemy 打造可持久化的数据层一、前言&#xff1a;为什么用 Flask-SQLAlchemy&#xff1f; 在 Python Web 开发中&#xff0c;操作数据库的方式主要有两种&#xff1a; 直接写 SQL&#xff08;繁琐且难维护&#xff09;使用 ORM&#xff…

50天50个小项目 (Vue3 + Tailwindcss V4) ✨ | GithubProfies(GitHub 个人资料)

&#x1f4c5; 我们继续 50 个小项目挑战&#xff01;—— GithubProfies组件 仓库地址&#xff1a;https://github.com/SunACong/50-vue-projects 项目预览地址&#xff1a;https://50-vue-projects.vercel.app/ 使用 Vue 3 的 Composition API&#xff08;<script setup…