java String类(超详细,含常用方法、面试题,内存图,案例)
String类
- 一、String类的特点
- 二、String 类的常见构造方法
- 三、String常见的面试题
- 1.字符串常量池
- 2.String s = "abc"与String s = new String("abc")区别
- 3.字符拼接+
- 4.常量优化机制
- 四、String常用方法
- 1. 比较字符串内容
- 2. 遍历字符串
- 3.截取字符串
- 4.替换字符串
- 5.切割字符串
一、String类的特点
- String是一个类,属于引用数据类型,不属于基本数据类型。

- Java 程序中所有双引号字符串, 都是 String 类的对象
/*
* 这里的"abc",就是一个String类对象
* 所以可以调用类里面的方法
* */
System.out.println("abc".length());
System.out.println("abc".toUpperCase());
- 字符串在创建之后, 其内容不可更改
例子如下:
String s="abc";
s="def";
System.out.println(s);//打印结果def
上面的例子相当于:
char data1[] = {'a', 'b', 'c'};
String s = new String(data1);char data2[] = {'d', 'e', 'f'};
s=new String(data2);//使用新的对象进行替换System.out.println(s);//打印结果def
结论:字符串对象一旦被创建,其内容就不能更改。要更改就只能使用新的字符串对象进行替换。后面会给出内存图。
- 字符串虽然不可改变, 但是可以被共享
String s1="abc";
String s2="abc";System.out.println(s1==s2);//true
结论:String是引用数据类型,所以==号比较的是地址,也就是说,s1和s2共享同一份地址。
这是什么原因呢?
在JDK当中双引号括起来的字符串,例如:“abc” "def"都是直接存储在“方法区”的“字符串常量池”当中的。
字符串常量池:
当我们使用双引号创建字符串对象时,会检查字符串常量池中是否存在该数据
存在:复用(共享)
不存在:创建

二、String 类的常见构造方法

//最常用的方式,不使用构造器
String s1 = "abc";
System.out.println(s1);//abc//构造方法1:public String()
String s2=new String();
System.out.println(s2);//空白字符串//构造方法2:public String(String original)
String s2 = new String("abc");//根据传入的字符串,创建字符串对象
System.out.println(s2);//abc//构造方法3:public String(char[] chs)
char[] c = {'a' , 'b', 'c'};
String s3 = new String(c);//根据字符数组,创建字符串对象
System.out.println(s3);//abc
三、String常见的面试题
1.字符串常量池

2.String s = "abc"与String s = new String(“abc”)区别

3.字符拼接+

4.常量优化机制
//Main.java
String s1="abc";
String s2="a"+"b"+"c";
System.out.println(s1==s2);//true
//Main.class
String s1 = "abc";
String s2 = "abc";
System.out.println(s1 == s2);
分析:与上一道题不同的是,这里字符串拼接符+左右都是字符串常量,没有变量。所以,常量优化机制吧它拼接成“abc”。因此,在字节码文件中,s1与s2一样,变为第一道面试题了。
四、String常用方法

1. 比较字符串内容
public boolean equals方法(要比较的字符串) : 比较内容
public boolean equalsIgnoreCase(要比较的字符串) : 比较内容, 忽略大小写
String s1="abc";
String s2=new String("abc");
String s3="AbC";
System.out.println(s1==s2);//false
System.out.println(s1.equals(s2));//true
System.out.println(s1.equals(s3));//false
System.out.println(s1.equalsIgnoreCase(s3));//true
2. 遍历字符串
public char[] toCharArray () : 将字符串转换为字符数组
public char chatAt (int index) : 根据索引找字符
public int length() : 返回字符串的长度
方法一:
String s="abcdefgh";
char[] data=s.toCharArray();
for (int i = 0; i < data.length; i++) {System.out.println(data[i]);
}
方法二:
String s="abcdefg";
for (int i = 0; i < s.length(); i++) {System.out.println(s.charAt(i));
}
推荐使用方法一,就只调用了一次toCharArray()。而方法二,每次循环都调用了一次length()和charAt(),开销大。
3.截取字符串
public String substring(int beginIndex) 截取到末尾
public String substring(int beginIndex, int endIndex) 根据开始和结束索引做截取, 包含头不包含尾
案例:截取手机号,隐藏中间四位
String s="12345678901";String start=s.substring(0,4);//截取前四位
String end=s.substring(7);//截取后四位
System.out.println(start+"****"+end);//1234****8901
4.替换字符串
public String replace(旧值,新值) : 替换
案例:敏感词替换(仅为案例)
String s="你TMD真是个小可爱";
s=s.replace("TMD","***");
System.out.println(s);//你***真是个小可爱
5.切割字符串
public String[] split(String regex) :根据给出的标识切割字符串
String s="192.168.0.0";
String[] splits = s.split("\\.");
for (int i = 0; i < splits.length; i++) {System.out.println(splits[i]);// 192 168 0 0
}
注意:如果根据指定标识符无法进行切割,则加上\\
相关文章:
java String类(超详细,含常用方法、面试题,内存图,案例)
String类一、String类的特点二、String 类的常见构造方法三、String常见的面试题1.字符串常量池2.String s "abc"与String s new String("abc")区别3.字符拼接4.常量优化机制四、String常用方法1. 比较字符串内容2. 遍历字符串3.截取字符串4.替换字符串5…...
哈希表以及哈希冲突
目录 哈希表 哈希冲突 1. 冲突发生 2. 比较常见的哈希函数 3. 负载因子调节(重点) 散列表的载荷因子概念 负载因子和冲突率的关系 冲突-解决-闭散列 线性探测 二次探测 冲突-解决-开散列 结尾 我们在前面讲解了TerrMap(Set)的底层是一个搜索…...
测试——基本概念
概念 测试和调试有以下几点区别: 测试是测试人员进行的工作,调试是开发人员调试是发现并解决问题,测试只是发现问题测试贯穿于整个项目的生命周期,而调试主要在编码阶段 测试人员一般有如下的工作: 需求分析&#x…...
SnowFlake 雪花算法和原理(分布式 id 生成算法)
一、概述 SnowFlake 算法:是 Twitter 开源的分布式 id 生成算法。核心思想:使用一个 64 bit 的 long 型的数字作为全局唯一 id。算法原理最高位是符号位,始终为0,不可用。41位的时间序列,精确到毫秒级,41位…...
【死磕数据库专栏】MySQL对数据库增删改查的基本操作
前言 本文是专栏【死磕数据库专栏】的第二篇文章,主要讲解MySQL语句最常用的增删改查操作。我一直觉得这个世界就是个程序,每天都在执行增删改查。 MySQL 中我们最常用的增删改查,对应SQL语句就是 insert 、delete、update、select…...
阿里软件测试二面:adb 连接 Android 手机的两种方式,看完你就懂了
前言 随着现在移动端技术的突飞猛进,导致现在市场上,APP 应用数不胜数,那对于测试工程师而言,对于 APP 的测试,那基本就是一个必修课了。 今天,我就来给大家介绍一下,adb 连接 Android 手机的两…...
Docker安装YApi
目录0、Docker 环境准备1、数据库准备 MongoDB2、启动 YAPI3、官网教程0、Docker 环境准备 Docker 容器之间网络互通需要使用 docker network create yapi 创建一个自定义网络 docker network create yapi1、数据库准备 MongoDB YAPI 的数据库是 MongoDB,准备镜像…...
springboot自定义参数解析器
为什么要自定义参数解析器呢? 因为很多项目每次获取用户信息,需要重复从请求头中获取token,用token再去redis或是sql中去拿到存储的计本对象,再将获取到的Json数据,转化为我们需要的对象等代码,作为一名程…...
Python Unittest ddt数据驱动
1、数据驱动介绍: ddt.ddt(类装饰器,申明当前类使用ddt框架)ddt.data(函数装饰器,用于给测试用例传递数据),支持传python所有数据类型:数字(int,…...
Vue自定义组件遇到分页传输数据不正确解决办法
测试环境 Vue3 Element Plus 遇到问题 <el-table:data"tableData">...其他el-table-column<template #default"scope">// 自定义组件<my-button name"编辑" :id"scope.row.id"/ ></template></el-table&…...
ABAP 辨析CO|CN|CA|NA|CS|NS|CP|NP
1、文档说明 本篇文档将通过举例,解析字符的比较运算符之间的用法和区别,涉及到的操作符:CO|CN|CA|NA|CS|NS|CP|NP 2、用法和区别 用法总览 以下举例,几乎都使用一个字符变量和一个硬编码字符进行对比的方式,忽略尾…...
RK3568平台开发系列讲解(设备驱动篇)Pinctrl子系统详解
🚀返回专栏总目录 文章目录 一、pinctrl子系统结构描述二、重要的概念三、主要的数据结构和接口沉淀、分享、成长,让自己和他人都能有所收获!😄 📢我们知道在许多soc内部包含有多个pin控制器,通过pin控制器的寄存器,我们可以配置一个或者一组引脚的功能和特性。Linux…...
ROS小车研究笔记:二维SLAM建图简介与源码分析
ROS提供了现成的各类建图算法实现。如果只是应用的话不需要了解详细算法原理,只需要了解其需要的输入输出即可。 1 Gmapping Gmapping使用粒子滤波算法进行建图,在小场景下准确度高,但是在大场地中会导致较大计算量和内存需求 Gmapping需要…...
番外9:使用ADS对射频功率放大器进行非线性测试1(以IMD3测试为例)
番外9:使用ADS对射频功率放大器进行非线性测试1(以IMD3测试为例) 一般可以有多种方式对射频功率放大器的非线性性能进行测试,包括IMD3、ACPR、ACLR等等,其中IMD3的实际测试较为简单方便不需要太多的仪器。那么在ADS中…...
车载软件背景(留坑)
目前,车载软件已经成为汽车电子系统中不可或缺的一部分。随着汽车制造商不断增加车载软件的功能和性能,车载软件的市场规模也在不断扩大。据市场研究公司 Grand View Research 预测,到2025年,全球车载软件市场规模将达到190亿美元…...
Hadoop-MapReduce
Hadoop-MapReduce 文章目录Hadoop-MapReduce1 MapRedcue的介绍1.1 MapReduce定义1.2 MapReduce的思想1.3MapReduce优点1.4MapReduce的缺点1.5 MapReduce进程1.6 MapReduce-WordCount1.6.1 job的讲解2 Hadoop序列化2.1 序列化的定义2.2 hadoop序列化和java序列化的区别3 MapRedu…...
ChatGPT来了,软件测试工程师距离失业还远吗?
小伙伴们前一段是不是都看到过ChatGPT的相关视频,那它到底是什么?对软件测试行业会有什么影响? 今天汇智妹就用一篇文章来给大家讲清楚。 一、ChatGPT是什么? 简单来说,ChatGPT是一款人工智能聊天机器人,…...
【项目实战】Linux服务管理 之 开启/关闭防火墙
一、service命令是什么? service命令用于对系统服务进行管理,比如 启动(start)停止(stop)重启(restart)查看状态(status) service命令本身是一个shell脚本…...
OSS存储使用之centOS系统ossfs挂载
以CentOS7系统为例 下载CentOS系统支持的ossfs工具的版本,以下载CentOS 7.0 (x64)版本为例,可以通过wget命令进行安装包的下载 wget http://gosspublic.alicdn.com/ossfs/ossfs_1.80.6_centos7.0_x86_64.rpm 也可以通过yum命令来进行安装包的下载 sud…...
【项目实战】SpringBoot多环境(dev、test、prod)配置
一、三套环境介绍 1.1 开发环境(dev) 开发环境是程序猿们专门用于开发的服务器,配置可以比较随意 为了开发调试方便,一般打开全部错误报告。 1.2 测试环境(test) 一般是克隆一份生产环境的配置 一个程序在测试环境工作不正常,那么肯定不能把它发布到生产机上。 有些…...
ZFAKA发卡网搭建避坑实录:从YAF扩展安装到目录权限,我踩过的雷你别再踩了(Linux环境)
ZFAKA发卡网Linux搭建实战:关键问题解析与深度排雷指南 第一次在Linux上部署ZFAKA时,我本以为按照教程半小时就能搞定,结果却花了整整两天时间与各种报错信息搏斗。从YAF扩展的诡异报错到目录权限引发的连锁反应,每个环节都暗藏杀…...
设备维护日历可视化:用低代码平台打造智能保养提醒看板(含模板下载)
设备维护日历可视化:用低代码平台打造智能保养提醒看板 在制造业的日常运营中,设备维护保养常常被视为"必要但繁琐"的后台工作。传统的手工记录或Excel表格管理方式,不仅效率低下,还容易因人为疏忽导致关键保养任务被遗…...
如何安全高效地烧录系统镜像?Balena Etcher带来无忧体验
如何安全高效地烧录系统镜像?Balena Etcher带来无忧体验 【免费下载链接】etcher Flash OS images to SD cards & USB drives, safely and easily. 项目地址: https://gitcode.com/GitHub_Trending/et/etcher 你是否曾因误操作将系统镜像写入电脑硬盘而丢…...
WindowsCleaner深度解析:如何用开源工具轻松解决C盘空间不足问题
WindowsCleaner深度解析:如何用开源工具轻松解决C盘空间不足问题 【免费下载链接】WindowsCleaner Windows Cleaner——专治C盘爆红及各种不服! 项目地址: https://gitcode.com/gh_mirrors/wi/WindowsCleaner 你是否经常遇到C盘空间不足的困扰&am…...
大模型推理中Prefill与Decode、KV Cache三者说明
大语言模型推理基于自回归生成范式,严格分为 Prefill(预填充) 与 Decode(解码) 两个阶段。二者在计算形态、访存特征、硬件瓶颈上存在本质差异。KV Cache(键值缓存) 是实现两阶段衔接、消除重复…...
C# 核心技术解析:Parse vs TryParse 实战指南
文章目录1. 核心区别:暴力型 vs. 稳重型Parse: 默认数据正确TryParse: 典型的 C# 模式示例2. 执行流程图3. 性能4. 高性能方案4.1. 高性能转换:Span<char> 与 Utf8Parser4.2. 执行流程:内存视角4.3. 类型转换对比5. 易混淆在 C# 处理字…...
OpenClaw+Qwen3-32B内容创作流:从提纲到公众号发布的自动化
OpenClawQwen3-32B内容创作流:从提纲到公众号发布的自动化 1. 为什么需要自动化内容创作 作为一个技术博主,我每周至少要产出2-3篇深度文章。最痛苦的时刻不是写作本身,而是面对空白文档时的"冷启动"阶段——从选题构思到完成初稿…...
HTTP自动化测试架构:基于QD框架的HAR模板规模化治理策略
HTTP自动化测试架构:基于QD框架的HAR模板规模化治理策略 【免费下载链接】templates 基于开源新版 QD 框架站发布的公共har模板库,仅供示例 项目地址: https://gitcode.com/GitHub_Trending/templa/templates 在当今云原生和微服务架构盛行的时代…...
Windows下OpenClaw安装全攻略:对接ollama的GLM-4.7-Flash模型
Windows下OpenClaw安装全攻略:对接ollama的GLM-4.7-Flash模型 1. 为什么选择OpenClawGLM-4.7-Flash组合 去年我在尝试自动化办公流程时,发现市面上的RPA工具要么功能臃肿,要么需要复杂的图形化编程。直到遇见OpenClaw这个开源智能体框架&am…...
告别乱码!ESP32-S3+LVGL 9.2.2驱动ILI9488显示中文的保姆级教程(附完整代码)
ESP32-S3LVGL 9.2.2中文显示实战:从乱码到完美呈现的终极指南 当你在ESP32-S3上成功驱动了ILI9488显示屏,LVGL的基础例程也跑起来了,却发现中文显示全是方块或乱码时,这种挫败感我深有体会。中文显示问题一直是嵌入式GUI开发中的…...
