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

String字符串

一.字符串构造

1.使用常量串构造

2.直接new String对象

3.使用字符数组进行构造

二.判断字符串相同

.1.==

该符号是以字符串地址来进行判断 即使两者字符串内容相同但如果不用同一个地址的话 也是false

2.equals

equals是用来判断字符串内容是否相同的关键字 如果内容相同则为true 反之为false

三.字符串与数组之间的转换

1.字符串转为数组

2.数组转化为字符串

四.字符串在idea中具有多种功能例如 比较大小 变大小写均可在帮助文档里面找到对应功能函数

附加 在字符串拆分时 字符| * +都需加上转义字符\\

五.  字符串变大小写

由此可得出在字符串变大小写时并不是直接变原来字符串内容 而是在原来基础上重新构造产生一个数组 从而将变完的数组赋值给该新数组 原数组仍不变,这点需要注意

六.StingBuffer 与StringBulder

1.StringBuffer

StringBuffer是使用缓冲区的,本身也是操作字符串的,但与String类不同,String类中的内容一旦声明之后不可改变,改变的只是其内存地址的指向,而StringBuffer中的内容是可以改变的[1] 。
对于StringBuffer而言,本身是一个具体的操作类,所以不能像String那样采用直接赋值的方式进行对象实例化,必须通过构造方法完成。


StringBuffer连接字符操作
当一个字符串的内容需要被经常改变时就要使用StringBuffer。
在StringBuffer中使用append()方法,完成字符串的连接操作。

2.StringBulder

构造函数:
StringBuilder():构造一个不带任何字符的字符串生成器,初始容量为16个字符。
StringBuilder(String str):根据指定的字符串内容构造一个字符串生成器,并初始化为指定的字符串内容。
append 方法:用于向字符串生成器中追加字符或各种类型的数据。append 方法会返回当前对象本身,支持链式编程。
insert 方法:允许在指定位置插入字符或各种类型的数据。
delete 和 replace 方法:用于删除或替换字符串中的部分内容。
reverse 方法:用于反转字符串生成器中的字符序列。
toString 方法:将 StringBuilder 对象转换为 String 对象。
使用场景:
StringBuilder 适用于在单线程环境中进行字符串的频繁修改操作。例如,字符串的拼接、反转等。由于 StringBuilder 在性能上的优势,它通常被推荐用于这些场景。

示例代码:
StringBuilder sb = new StringBuilder("initial string");
sb.append(" more text"); // 追加字符串
sb.insert(0, "prefix"); // 在起始位置插入字符串
sb.delete(4, 8); // 删除指定位置的字符
sb.replace(4, 8, "replaced"); // 替换指定位置的字符
String result = sb.toString(); // 转换为String类型

3.两者联系

 1.线程安全:
StringBuffer是线程安全的,它的所有公开方法都被synchronized修饰,这意味着在多线程环境下,StringBuffer能够安全地被多个线程访问和修改。而StringBuilder是线程不安全的,它的方法没有被同步,因此在单线程环境中,StringBuilder的性能要优于StringBuffer。
2.性能:
由于StringBuffer的线程安全特性,它的性能可能会受到影响。在多线程环境下,StringBuilder的性能要低于StringBuffer,因为它不需要考虑线程同步的开销。然而,在单线程环境中,StringBuilder的性能要优于StringBuffer,因为它避免了不必要的同步操作。
3.缓冲区:
StringBuffer内部使用一个char数组来存储字符串,并且有一个toStringCache字段来缓存转换后的字符串。而StringBuilder没有这个缓存,它每次都需要复制字符数组来构造一个新的字符串。
4.使用场景:
根据上述特点,StringBuffer适用于多线程且频繁操作的数据存储,而StringBuilder适用于单线程且频繁操作的数据存储。在实际应用中,如果字符串操作涉及多线程,那么应该使用StringBuffer;否则,如果字符串操作是单线程的,可以考虑使用StringBuilder来提高性能

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • uniapp(H5)设置反向代理,设置成功后页面报错
  • AI教你学Python 第4天:函数和模块
  • MySQL下载安装
  • 可信多视图分类(TCM ETCM)算法实现数字序列的分类---基因致病的诊断
  • JAVA学习-练习试用Java实现“子集 II”
  • 代码随想录训练营 Day58打卡 图论part08 拓扑排序 dijkstra朴素版 + 堆优化版
  • 机器学习和深度学习的常见概念总结(多原创图)
  • 设计模式(Design Patterns)
  • Unity程序基础框架
  • Cisco Catalyst 9000 Series Switches, IOS XE Release 17.15.1 ED
  • Android应用性能优化
  • C#中判断socket是否已断开的方法
  • 基于java网吧管理系统设计与实现
  • vue3.0 使用echarts与echarts-gl 实现3D饼图
  • 828华为云征文 | 华为云FlexusX实例下的Kafka集群部署实践与性能优化
  • [译] 理解数组在 PHP 内部的实现(给PHP开发者的PHP源码-第四部分)
  • 【407天】跃迁之路——程序员高效学习方法论探索系列(实验阶段164-2018.03.19)...
  • docker-consul
  • EOS是什么
  • ES6系统学习----从Apollo Client看解构赋值
  • extjs4学习之配置
  • IDEA 插件开发入门教程
  • LintCode 31. partitionArray 数组划分
  • Service Worker
  • 得到一个数组中任意X个元素的所有组合 即C(n,m)
  • 多线程事务回滚
  • 聊聊directory traversal attack
  • 深度学习中的信息论知识详解
  • 想晋级高级工程师只知道表面是不够的!Git内部原理介绍
  • 学习JavaScript数据结构与算法 — 树
  • 云栖大讲堂Java基础入门(三)- 阿里巴巴Java开发手册介绍
  • Spark2.4.0源码分析之WorldCount 默认shuffling并行度为200(九) ...
  • 通过调用文摘列表API获取文摘
  • ​Distil-Whisper:比Whisper快6倍,体积小50%的语音识别模型
  • ​一帧图像的Android之旅 :应用的首个绘制请求
  • #我与Java虚拟机的故事#连载19:等我技术变强了,我会去看你的 ​
  • (12)Linux 常见的三种进程状态
  • (2015)JS ES6 必知的十个 特性
  • (bean配置类的注解开发)学习Spring的第十三天
  • (ISPRS,2023)深度语义-视觉对齐用于zero-shot遥感图像场景分类
  • (LeetCode C++)盛最多水的容器
  • (rabbitmq的高级特性)消息可靠性
  • (定时器/计数器)中断系统(详解与使用)
  • (附源码)springboot 智能停车场系统 毕业设计065415
  • (附源码)计算机毕业设计大学生兼职系统
  • (接口封装)
  • (一)Spring Cloud 直击微服务作用、架构应用、hystrix降级
  • (转载)Linux 多线程条件变量同步
  • ... fatal error LINK1120:1个无法解析的外部命令 的解决办法
  • .gitignore不生效的解决方案
  • .NET 4 并行(多核)“.NET研究”编程系列之二 从Task开始
  • .Net 垃圾回收机制原理(二)
  • .net 流——流的类型体系简单介绍
  • .Net(C#)自定义WinForm控件之小结篇
  • .NET/C# 使用 ConditionalWeakTable 附加字段(CLR 版本的附加属性,也可用用来当作弱引用字典 WeakDictionary)