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对象进行自然排序(基于字典顺序)。这使得字符串可以直接用于排序算法中,或者存储在需要排序的集合(如TreeSetTreeMap)里,而无需额外提供比较器

这些接口的实现使得String不仅能够作为基本的文本载体,还能够在更广泛的上下文中发挥功能,比如参与序列化操作、在泛型算法中作为字符序列被操作,以及在需要比较和排序的场合自动排序,体现了其设计的通用性和实用性。

2,不可变的字符串对象

API文档上明确说明String objects are immutable ,即字符串对象是不可变的,应该如何理解不可变呢?

创建字符串对象后,字符串的值不能被修改String不提供任何方法修改字符串的值。如下图,字符串对象创建后,堆内存中存储了字符串lcy,那么除非整个对象被垃圾回收,否则无法通过StringAPI修改内存中的值,值始终都是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!"); // 比较内容是否相等

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/668525.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

LabVIEW远程开发与调试

在现代项目开发中,远程开发与调试已经成为一种常见的模式,特别是在使用LabVIEW进行工程项目时。本文将详细分析LabVIEW远程开发与调试的优缺点,并从多个角度说明如何建议客户采用这种方式,以提高项目效率和质量。 优点 灵活性和便…

全面理解渗透测试

揭秘网络安全的秘密武器:全面理解渗透测试 在数字化时代,网络安全已成为人们关注的焦点。网络攻击和数据泄露事件频发,给个人、企业和国家带来了巨大的损失。为了应对这一挑战,渗透测试作为一种重要的网络安全评估手段&#xff0…

Java之IO流

一、引言 (1)解释: i:input (输入) o:output (输出) (2)图解 注意: 1、Xxx 这个程序一旦在桌面关闭掉了,也就是运行完…

Apache安装教程

目录 一、Apache知识点 Apache服务简介 Apache下载网址 Apache的主要特点 二、Apache服务的搭建 1. 关闭防火墙 2. 安装依赖环境以及编译工具 3. 将apache安装包拖入xshell内 4. 解压压缩包 5. 进入httpd主包 6. 指定安装路径,启用字符集支持等 7. 优化执…

(2021,AFT,MHA,RWKV 基础,线性内存复杂度)无注意力的 Transformer

An Attention Free Transformer 公和众和号:EDPJ(进 Q 交流群:922230617 或加 VX:CV_EDPJ 进 V 交流群) 目录 0. 摘要 2. 多头注意力(MHA) 3. 方法 3.1 无注意力 Transformer 3.2 AFT 变体…

【python】OpenCV—Tracking(10.2)

文章目录 BackgroundSubtractorcreateBackgroundSubtractorMOG2createBackgroundSubtractorKNN BackgroundSubtractor Opencv 有三种背景分割器 K-Nearest:KNN Mixture of Gaussian(MOG2) Geometric Multigid(GMG) …

【题解 | 分享】2023年十四届蓝桥杯国赛(Java B组)

互质 答案:640720414 参考: public class Main {static int mod 1000000007;public static void main(String[] args) {long sum power(2023, 2023);long p1 ((sum % mod) * power( 7, mod - 2)) % mod;long p2 ((sum % mod) * power( 17, mod -…

高效派单的秘诀:探索运维工单处理软件的五大关键功能-亿发

在快节奏的现代企业运营中,如何高效管理生产流程,确保任务按时完成,同时保持产品质量和客户满意度,是每个管理者面临的重要课题。工单管理系统,作为企业数字化转型的关键工具,正逐渐成为解决这些问题的利器…

大模型微调常见方法

0, prefix tuning prefix-tuning 跟 soft prompt tuning 类似,只不过,soft prompt tuning 仅仅针对 transformer模型的输入进行,而prefixt-tuning 是针对 每一个 transformer block进行 soft prompt tuning 跟 hard prompt tunin…

AI预测体彩排3采取888=3策略+和值012路一缩定乾坤测试6月1日预测第8弹

今天继续基于8883的大底进行测试,今天继续测试,好了,直接上结果吧~ 首先,888定位如下: 百位:8,9,7,6,4,3,2,0 十位:4,5,3,2,7,8,0,9 个位:3,4,5,2,…

【Python系列】Python 中方法定义与方法调用详解

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

处理3D数据的强大工具 CloudCompare (多平台兼容)

CloudCompare 是一个开源的3D点云(Point Cloud)和网格(Mesh)处理软件,广泛应用于地理信息系统(GIS)、计算机图形学、测绘、考古、建筑和工程等领域。自2004年由Daniel Girardeau-Montaut开发以来…

记录深度学习GPU配置,下载CUDA与cuDnn,安装tensorflow

目标下载: cuda 11.0.1_451.22 win10.exe cudnn-11.0-windows-x64-v8.0.2.39.zip Anaconda的安装请看别的博主的,这里不再赘述 看看自己电脑的cuda 方法一:打开英伟达面板查看 方法二:使用命令行 随便找个文件夹,在顶部路径输入"cmd" 输入下面命令 nvidia-smi 我…

使用QtCreator C++编写串口调试助手

100编程书屋_孔夫子旧书网 1.首先看一下我设计的界面(我这里比较简单,大家可根据自己的需求进行设计) (界面设计的过程中,每一个控件的名称最好进行修改,便于后续控件太多不好区分,给控件命名的…

Linux目录的基本结构(RHEL8系统基本使用之文件操作)

1.Linux的目录树结构 2.各目录的功能介绍 3.理解文件路径表示方法 Who?——>当前登录的用户 Where?——>路径 我要在哪儿创建文件? 我要删除什么地方的什么文件? 我所要查看的文件在哪里? What?——>操作命令 Ho…

黑马程序员——Spring框架——day03

目录: AOP AOP简介 问题导入AOP简介和作用【理解】AOP的应用场景为什么要学AOPAOP入门案例【重点】 问题导入AOP入门案例思路分析AOP入门案例实现AOP中的核心概念AOP工作流程【理解】 问题导入AOP工作流程AOP核心概念在测试类中验证代理对象AOP切入点表达式 问题导…

双指针练习:快乐数

1.题目链接:202.快乐数 2.题目描述: 编写一个算法来判断一个数 n 是不是快乐数。 「快乐数」 定义为: 对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。然后重复这个过程直到这个数变为 1,也可能是 无…

丛林生存法则其实就两个字:输出

不管你是在上班,还是在灵活就业,现在的大环境下,你要想活下来,生存下去,一定要记住这两个字:输出。如果你能记住更多的字,那便是持续高水平的输出。 你如果是大厂程序员,你肯定发现…

会议管理系统(含源码+sql+视频导入教程)

👉文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1 、功能描述 会议管理系统拥有两种角色 管理员:部门管理、员工管理、会议管理、会议室管理、预订会议、添加员工、注册员工审批等 用户:个人通知中心、预订会议、查看所有会议…

Java网络编程(下)

White graces:个人主页 🙉专栏推荐:Java入门知识🙉 🙉 内容推荐:Java网络编程🙉 🐹今日诗词:姑苏城外寒山寺,夜半钟声到客船🐹 ⛳️点赞 ☀️收藏⭐️关注💬卑微小博主…