java String类(超详细,含常用方法、面试题,内存图,案例)

2023-11-11

一、String类的特点
  1. String是一个类,属于引用数据类型,不属于基本数据类型。

在这里插入图片描述

  1. Java 程序中所有双引号字符串, 都是 String 类的对象
/*
* 这里的"abc",就是一个String类对象
* 所以可以调用类里面的方法
* */
System.out.println("abc".length());
System.out.println("abc".toUpperCase());
  1. 字符串在创建之后, 其内容不可更改

例子如下:

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

结论:字符串对象一旦被创建,其内容就不能更改。要更改就只能使用新的字符串对象进行替换。后面会给出内存图。

  1. 字符串虽然不可改变, 但是可以被共享
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
}

注意:如果根据指定标识符无法进行切割,则加上\\

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java String类(超详细,含常用方法、面试题,内存图,案例) 的相关文章

随机推荐

  • CSS_calc() 函数内部怎么使用scss变量

    使用 calc 函数来计算主体元素的宽度 其中通过 语法将 SCSS 变量转换为 CSS 变量 然后使用加法运算符 和乘法运算符 来计算宽度值 main width 100px main padding 10px main width ca
  • Unity 打包exe时添加管理员权限

    第一步 打开WindowsPlayer sln 路径 Editor Data PlaybackEngines windowsstandalonesupport Source WindowsPlayer 第二步 修改level level改成
  • 带你进入 OpenAI 的世界

    2021年11月的 Microsoft Ignite 微软带来了全新的 Azure OpenAI Service 通过新的 Azure 认知服务能够访问 OpenAI 强大的 GPT 3 模型 虽然微软还没有正式开放 Open AI Ser
  • charles手机模拟器的连接

    charles手机模拟器的连接 1 第一步 打开虚拟机设备 2 第二步 去掉window peoxy的勾选项 对app端测试 3 点击proxy选中proxy Setting 4 勾选这个 默认端口是8888
  • Linux下五种I/O模型详解(阻塞IO、非阻塞IO、IO复用、信号驱动、异步IO)

    https blog csdn net gui951753 article details 82348485 感谢博主 我已收藏
  • 异步编程(async 和 await)

    1 概念 异步编程是一项关键技术 可以直接处理多个核心上的I O阻塞和并发操作 2 使用场景 对于存在IO密集型 例如从网路请求数据 访问数据库和写入到文件系统 和CPU密集型 例如大量的计算 的任务可以选择异步编程 3 异步编程针对于IO
  • Linux下安装操作Git远程仓库与本地仓库同步的教程

    主机操作系统 Centos 6 7 安装配置 GIT邮箱 leiyuxing205 gmail com 一GIT简介 Git是一个开源的分布式版本控制系统 用以有效 高速的处理从很小到非常大的项目版本管理 Git 是 Linus Torva
  • 通过linux定时任务删除es日志索引

    能过linux定时任务删除es日志索引 项目用上了elk 产生的日志索引要定时 其一个方法 通过linux定时任务 调用es接口删除索引 bin bash 删除ELK30天前的日志 计算索引名称包含的日期 比如这里是 Y m d 2023
  • 深入浅出统计学(十四)卡方分布

    基本概念 问题 总结 卡方检验步骤 自由度计算
  • 百度前端实习生面试经历

    说实话 这应该是自己第一次认真准备 又很在意的面试 非常感谢学长的内推 昨天从下午三点一直到晚上七点经历了三场面试 每场大约半小时左右 前两场技术面 最后一面是高级项目经理的 软实力 面试 因为我没做过服务器端 所以基本没有涉及服务器端的知
  • c++实现简单分数统计

    include
  • CHAR与VARCHAR字段类型的适用场景

    在知乎看到的 特意做个笔记 CHAR CHAR适合存储很短的字符串 或者所有值都接近同一个长度 例如 CHAR非常适合存储密码的MD5值 因为这是一个定长的值 对于经常变更的数据 CHAR也比VARCHAR更好 因为定长的CHAR类型不容易
  • 如何制作一个百货小程序

    在这个数字化时代 小程序已成为各行各业的必备工具 其中 百货小程序因其便捷性和多功能性 越来越受到人们的青睐 那么 如何制作一个百货小程序呢 下面 我们就详细介绍一下无需编写代码的步骤 一 进入后台管理 首先 您需要注册并登录 乔拓云 操作
  • STM32+ESP8266连接电脑Qt网络上位机——准备工作

    准备工作 先使用手机和电脑实现局域网 保证电脑的上位机和手机APP 实现服务器和客户机无障碍通信 文章目录 一 准备工作 二 手机作为服务器 三 电脑作为服务器 一 准备工作 工具 手机端 NeTorch 网络调试工具 电脑端 野火网络调试
  • Maven设置网络中央仓库的镜像

    使用国内阿里云的镜像进行设置 在Maven的安装路径下的conf下的settings xml文件中进行配置 将下面的代码复制到settings py文件中
  • 三层交换机及VLAN(入门)

    文章目录 三层交换机及VLAN VLAN入门 1 数据链路层的基础知识 1 1什么是数据链路层 1 2数据链路层的基本功能 2 以太网基本定义 2 1 MAC地址简介 2 2 以太网数据帧的格式 3 交换机的工作原理 3 1交换机的作用 3
  • go语言中的if语句

    go语言中的if语句 go语言中的if语句和其他语言中的类似 都是根据给定的条件表达式运算结果来 判断执行流程 go语言if语句语法 if 布尔表达式 在布尔表达式为 true 时执行 注意 在go语言中 布尔表达式不用使用括号 go语言i
  • WPF+EF Core入门:制作可视化窗体软件

    原因 最近要面试一家公司 公司有对WPF架构的要求 然后就开始自学了 功能描述 加载所有学生信息 名字筛选学生信息 重置筛选 新增学生信息 修改学生信息 删除学生信息 窗体样式 操作步骤 一 引用文件包 进去管理NuGet程序包 引入EF
  • 使用centos7搭建syslog和loganalyzer日志服务器

    主要步骤是网上根据博客来安装及排错调试 这两张帖子都写的很详细 http www ifzhai com article php id 9 https blog csdn net qq 33157780 article details 506
  • java String类(超详细,含常用方法、面试题,内存图,案例)

    String类 一 String类的特点 二 String 类的常见构造方法 三 String常见的面试题 1 字符串常量池 2 String s abc 与String s new String abc 区别 3 字符拼接 4 常量优化机