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

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!"); // 比较内容是否相等
http://www.lryc.cn/news/359564.html

相关文章:

  • 互联网政务应用安全管理规定:使用安全连接方式访问
  • 安全测试用例及解析(Word原件,直接套用检测)
  • github将默认分支main改为master
  • java.lang.NoClassDefFoundError: org/dom4j/io/SAXReader
  • 读后感:《SQL数据分析实战》运营SQL实用手册
  • 建设人工智能平台,主流GPU卡选型分析
  • RTSPtoWebRTC、RTSPtoWeb ( 自HTML播放):页面中预览摄像机视频,无插件的播放方式,适合局域网使用,无需流媒体服务器
  • C语言| 三个整数从小到大排序
  • C语言基础编程题目解析:探索逻辑与算法的奥秘
  • jmeter基础入门练习题
  • 大数据技术原理(三):HDFS 最全面的 API 操作,你值得收藏
  • Flink系列二:DataStream API中的Source,Transformation,Sink详解(^_^)
  • 最好的电脑数据恢复软件是什么
  • 机器学习模型调试学习总结
  • 文明互鉴促发展——2024“国际山地旅游日”主题活动在法国启幕
  • 【C++进阶】深入STL之string:掌握高效字符串处理的关键
  • 一、初识Qt 之 Hello world
  • nginx搭建简单负载均衡demo(springboot)
  • SpringBoot的第二大核心AOP系统梳理
  • react、vue动态form表单
  • halcon程序如何导出C#文件
  • RabbitMQ三、springboot整合rabbitmq(消息可靠性、高级特性)
  • 第八十九周周报
  • Centos升级Openssh版本至openssh-9.3p2
  • 茉莉香飘,奶茶丝滑——周末悠闲时光的绝佳伴侣
  • 揭秘:Java字符串对象的内存分布原理
  • Vue.js - 生命周期与工程化开发【0基础向 Vue 基础学习】
  • Element-UI 快速入门指南
  • 2024华为OD机试真题-整型数组按个位值排序-C++(C卷D卷)
  • 善听提醒遵循易经原则。世界大同只此一路。