Java字符串String详解
Java中的String类作为存储和操作文本数据的基本类型,是开发过程中最常用的类型。
String类型的声明及初始化与基本数据类型非常相似:
String name = "lcy";
但是String类型是引用类型,有着非常丰富的处理字符串的方法。正是因为其重要性,Sun公司针对String类型做了很多优化,使得String类型使用起来非常灵活、高效、简单。
作为Java程序员,不仅要掌握String类型的用法,还应该深入原理,领略其设计之妙和设计之美。
一,String介绍
1,初识String
官网API文档
-
String
类位于java.lang
包下,使用这个包下的类时,无需用import
显式导入 -
String
类被定义为final
类型,不能被继承,其方法不能被重写
Java中的String
类型实现了几个关键接口,这些接口赋予了String
特定的功能和行为,具体包括: -
实现了
Serializable
接口,表明String
对象是可以被序列化的,即它可以被转换成一系列字节,保存到磁盘上或通过网络进行传输,之后还能恢复成原来的状态 -
实现了
CharSequence
接口,这使得String对象具备处理组成字符串的单个字符的能力 -
实现了
Comparable
接口,String
对象可以直接与其他String
对象进行自然排序(基于字典顺序)。这使得字符串可以直接用于排序算法中,或者存储在需要排序的集合(如TreeSet
、TreeMap
)里,而无需额外提供比较器
这些接口的实现使得String
不仅能够作为基本的文本载体,还能够在更广泛的上下文中发挥功能,比如参与序列化操作、在泛型算法中作为字符序列被操作,以及在需要比较和排序的场合自动排序,体现了其设计的通用性和实用性。
2,不可变的字符串对象
API文档上明确说明String objects are immutable
,即字符串对象是不可变的,应该如何理解不可变
呢?
创建字符串对象后,字符串的值不能被修改
,String
不提供任何方法修改字符串的值。如下图,字符串对象创建后,堆内存中存储了字符串lcy
,那么除非整个对象被垃圾回收,否则无法通过String
的API
修改内存中的值,值始终都是lcy
。
有的同学会举分离,下面的代码可以改变字符串的值,你怎么解释呢?
name = name + " hello";
System.out.println(name);// 输出 lcy hello
上面代码表面上改变了name
的值,实际上 name + " hello"
这行代码会创建一个新对象,name
变量指向新对象002
,原来的对象001
是没有被修改的:
二,String方法
1,构造字符串对象
String类提供的构造方法比较多,常见的有以下几种:
1.1 字面量
通过字面量创建一个字符串对象:
String str = “Hello Java”;
1.2 空构造函数
String str = new String();
该字符串对象的值为空字符串"".
1.3 通过字符数组构造
char[] chars = {'H', 'e', 'l', 'l', 'o'};
String str = new String(chars);
1.4 通过字符数组的一部分构造
char[] chars = {'H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd'};
String str = new String(chars, 0, 5); // 取前5个字符
1.5 通过字节数组构造
byte[] bytes = {72, 101, 108, 108, 111}; // ASCII编码的"Hello"
String str = new String(bytes);
2,遍历
for(char c : str.toCharArray()) {System.out.println(c);
}
3,截取
String subStr = str.substring(0, 5); // 获取前五个字符
4,替换
String replaced = str.replace("World", "Java"); // 将"World"替换为"Java"
5,查找
int index = str.indexOf("World"); // 返回"World"首次出现的位置
6,比较
boolean isEqual = str.equals("Hello, World!"); // 比较内容是否相等
相关文章:

Java字符串String详解
Java中的String类作为存储和操作文本数据的基本类型,是开发过程中最常用的类型。 String类型的声明及初始化与基本数据类型非常相似: String name "lcy";但是String类型是引用类型,有着非常丰富的处理字符串的方法。正是因为其重…...

互联网政务应用安全管理规定:使用安全连接方式访问
前几日,由中央网络安全和信息化委员会办公室、中央机构编制委员会办公室、工业和信息化部、公安部等4部门联合制定的《互联网政务应用安全管理规定》(以下简称规定)发布了,规定定义了互联网政务应用,也对互联网政务应用…...

安全测试用例及解析(Word原件,直接套用检测)
5 信息安全性测试用例 5.1 安全功能测试 5.1.1 标识和鉴别 5.1.2 访问控制 5.1.3 安全审计 5.1.4 数据完整性 5.1.5 数据保密性 5.1.6 软件容错 5.1.7 会话管理 5.1.8 安全漏洞 5.1.9 外部接口 5.1.10 抗抵赖 5.1.11 资源控制 5.2 应用安全漏洞扫描 5.2.1 应用安全漏洞扫描 5.3…...

github将默认分支main改为master
github将默认分支main改为master 1.进入github,点击setting 2.在setting中,选择Respositories,更新默认分支为master 3.选择要更新的项目,在项目中选择setting->general->切换默认分支...

java.lang.NoClassDefFoundError: org/dom4j/io/SAXReader
问题描述:在maven项目中,给SAXReader创建实例,启动tomcat服务器后报异常java.lang.NoClassDefFoundError: org/dom4j/io/SAXReader。我在pom文件中是引入了dom4j依赖得,但是不知道为什么在上传到web时就找不到了 解决办法&#x…...

读后感:《SQL数据分析实战》运营SQL实用手册
学习SQL,先有用起来,有了使用价值,之后才是去了解它的原理,让使用更加顺畅。 在大部分业务场景中,通过SQL可以快速的实现数据处理与统计。《SQL数据分析实战》区别于其他工具书,它并没有介绍SQL是什么&…...

建设人工智能平台,主流GPU卡选型分析
国内外主流GPU卡性能分析!2024! 大模型兴起助推算力需求激增 2024年,深度学习与人工智能技术飞速跃进,Transformer、GPT-3等大模型在自然语言处理、图像识别、语音合成等领域大放异彩,开启AI新纪元。其庞大的参数与数…...
RTSPtoWebRTC、RTSPtoWeb ( 自HTML播放):页面中预览摄像机视频,无插件的播放方式,适合局域网使用,无需流媒体服务器
文章目录 引言I 环境准备II RTSPtoWebRTC2.1 下载和编译2.2 配置config.jsonIII RTSPtoWebRTC问题优化: 使用http接口生成视频资源进行播放3.1 调用http接口生成视频资源进行播放3.2 启动关闭IV RTSPtoWeb4.1 config.json4.2 RTSPPlayersee also引言 需求: 海域感知,云台监控…...
C语言| 三个整数从小到大排序
【分析思路】 三个整数从小到大排序 这个程序的算法是: 先把第一个数num1跟它后面所有的数相比较,找出最小的,通过中间变量temp交换,赋给num1; 接着中间值num2和它后面所有的数相比较,找出第二小的,然后赋给…...
C语言基础编程题目解析:探索逻辑与算法的奥秘
C语言基础编程题目解析:探索逻辑与算法的奥秘 在编程的世界里,C语言作为一门基础且强大的编程语言,其题目往往涵盖了丰富的逻辑和算法知识。下面,我们将从四个方面、五个方面、六个方面和七个方面,对一系列C语言基础编…...
jmeter基础入门练习题
jmeter存在A,B两个线程组的情况下,默认设置下,运行顺序是:A A:A,B同时运行 B:先运行A,在运行B C:先运行A,等待2s运行B D:先A运行完,等待默认设置时间后运行B 下列说法正…...

大数据技术原理(三):HDFS 最全面的 API 操作,你值得收藏
(实验二 熟悉常用的HDFS操作) -------------------------------------------------------------------------------------------------------------------------------- 一、实验目的 1.理解 HDFS在 Hadoop体系结构中的角色。 HDFS是一个分布式文件系…...

Flink系列二:DataStream API中的Source,Transformation,Sink详解(^_^)
在上面篇文章中已经对flink进行了简单的介绍以及了解了Flink API 层级划分,这一章内容我们主要介绍DataStream API 流程图解: 一、DataStream API Source Flink 在流处理和批处理上的 source 大概有 4 类: (1)基于本…...

最好的电脑数据恢复软件是什么
由于硬件故障、恶意软件攻击或意外删除而丢失文件可能会造成巨大压力。数据丢失会扰乱日常运营,造成宝贵的业务时间和资源损失。在这些情况下,数据恢复软件是检索丢失或损坏数据的最简单方法。 数据恢复软件何时起作用? 对于 Windows 数据恢…...

机器学习模型调试学习总结
1.学习内容 模型调试方法:冻结部分层,训练剩余层 实践:在一个预训练的 BERT 模型上冻结部分层,并训练剩余的层 模型调试方法:线性探测(Linear Probe) 实践:在一个预训练的 BERT …...

文明互鉴促发展——2024“国际山地旅游日”主题活动在法国启幕
5月29日,2024“国际山地旅游日”主题活动在法国尼斯市成功举办。中国驻法国使领馆、法国文化旅游部门、地方政府、国际组织、国际山地旅游联盟会员代表、旅游机构、企业、专家、媒体等围绕“文明互鉴的山地旅游”大会主题和“气候变化与山地旅游应对之策”论坛主题展…...

【C++进阶】深入STL之string:掌握高效字符串处理的关键
📝个人主页🌹:Eternity._ ⏩收录专栏⏪:C “ 登神长阶 ” 🤡往期回顾🤡:C模板入门 🌹🌹期待您的关注 🌹🌹 ❀STL之string 📒1. STL基本…...

一、初识Qt 之 Hello world
一、初识Qt 之 Hello world 提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 初识Qt 之 Hello world文章目录 一、Qt 简介二、Qt 获取安装三、Qt 初步使用四、Qt 之 Hello world1.新建一个项目 总结 一、Qt 简介 C …...

nginx搭建简单负载均衡demo(springboot)
目录 1 安装nignx 1.1 执行 brew install nginx 命令(如果没安装brew可百度搜索如何安装brew下载工具。类似linux的yum命令工具)。 1.2 安装完成会有如下提示:可以查看nginx的配置文件目录。 1.3 执行 brew services start nginx 命令启动…...

SpringBoot的第二大核心AOP系统梳理
目录 1 事务管理 1.1 事务 1.2 Transactional注解 1.2.1 rollbackFor 1.2.2 propagation 2 AOP 基础 2.1 AOP入门 2.2 AOP核心概念 3. AOP进阶 3.1 通知类型 3.2 通知顺序 3.3 切入点表达式 execution切入点表达式 annotion注解 3.4 连接点 1 事务管理 1.1 事务…...
React Native 导航系统实战(React Navigation)
导航系统实战(React Navigation) React Navigation 是 React Native 应用中最常用的导航库之一,它提供了多种导航模式,如堆栈导航(Stack Navigator)、标签导航(Tab Navigator)和抽屉…...

Python:操作 Excel 折叠
💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...

《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》
在注意力分散、内容高度同质化的时代,情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现,消费者对内容的“有感”程度,正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中࿰…...
Python如何给视频添加音频和字幕
在Python中,给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加,包括必要的代码示例和详细解释。 环境准备 在开始之前,需要安装以下Python库:…...
Rapidio门铃消息FIFO溢出机制
关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系,以下是深入解析: 门铃FIFO溢出的本质 在RapidIO系统中,门铃消息FIFO是硬件控制器内部的缓冲区,用于临时存储接收到的门铃消息(Doorbell Message)。…...
rnn判断string中第一次出现a的下标
# coding:utf8 import torch import torch.nn as nn import numpy as np import random import json""" 基于pytorch的网络编写 实现一个RNN网络完成多分类任务 判断字符 a 第一次出现在字符串中的位置 """class TorchModel(nn.Module):def __in…...

视觉slam十四讲实践部分记录——ch2、ch3
ch2 一、使用g++编译.cpp为可执行文件并运行(P30) g++ helloSLAM.cpp ./a.out运行 二、使用cmake编译 mkdir build cd build cmake .. makeCMakeCache.txt 文件仍然指向旧的目录。这表明在源代码目录中可能还存在旧的 CMakeCache.txt 文件,或者在构建过程中仍然引用了旧的路…...
音视频——I2S 协议详解
I2S 协议详解 I2S (Inter-IC Sound) 协议是一种串行总线协议,专门用于在数字音频设备之间传输数字音频数据。它由飞利浦(Philips)公司开发,以其简单、高效和广泛的兼容性而闻名。 1. 信号线 I2S 协议通常使用三根或四根信号线&a…...

七、数据库的完整性
七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...

GruntJS-前端自动化任务运行器从入门到实战
Grunt 完全指南:从入门到实战 一、Grunt 是什么? Grunt是一个基于 Node.js 的前端自动化任务运行器,主要用于自动化执行项目开发中重复性高的任务,例如文件压缩、代码编译、语法检查、单元测试、文件合并等。通过配置简洁的任务…...