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

Java中的String类

String类

  • 1.String类
    • 1.1 特性
    • 1.2 面试题
    • 1.3 常用方法
    • 1.4 String与其他类型之间的转换
  • 2. StringBuilder类、StringBuffer类:可变字符序列

1.String类

1.1 特性

  1. String类为final类,不可被继承,代表不可变的字符序列;

  2. 实现了Serializable接口,表示字符串支持序列化; 实现了Comparable接口,表示字符串可比较大小;

  3. String对象的字符内容是存储在内部的final char型数组value中的;该数组不可再赋值,其元素也不能再改变;

  4. 字符串是常量,用双引号表示,具有不可变性,其值在创建之后不能改变;体现:
    1)当对字符串引用重新赋值时,需重新开辟内存区域进行赋值,不能使用原有的value数组进行赋值;
    2)当对现有字符串进行拼接操作时,需重新开辟内存区域进行赋值,不能使用原有的value数组进行赋值;
    3)当使用replace方法对字符串内容进行修改时,需重新开辟内存区域进行赋值,不能使用原有的value数组进行赋值;

  5. 通过字面量的方式(区别于new)给一个字符串引用赋值,该字符串值声明在字符串常量池中;

  6. 字符串常量池不会存储相同内容的字符串;

在这里插入图片描述

1.2 面试题

面试题1: 通过1)字面量方式声明变量;2)new String(“xxx”)的方式声明变量,的区别?

字符串常量存储在方法区的字符串常量池中,目的是共享; 字符串非常量对象存储在堆中;

面试题2: String s=new String(“abc”)方式创建对象,在内存中创建了几个对象?

1)堆空间中的new 结构;2)value数组对应的字符串常量池中的数据"abc";

面试题3final 修饰的字符串变量为常量,存储在常量池!

在这里插入图片描述
在这里插入图片描述

结论:通过不同的字面量赋值方式进行变量声明,有什么区别?

  • 如果只是不同字面量的拼接,则拼接结果在常量池;
  • 一旦拼接对象涉及到变量,则拼接结果在堆中;
  • 如果拼接结果调用intern()入池方法,则方法返回值在常量池中;

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.3 常用方法

int compareTo(String anotherString):该方法返回值有3中可能:比如"当前串".compareTo(“被比较串”)

  • 0:表示两个字符串内容相等;
  • >0:表示当前串大于被比较串;
  • <0表示当前串小于被比较串;

在这里插入图片描述
indexOf(str)和lastIndexOf(str)的返回值什么情况下相等?

  • case1:原始串中只有一个str;
  • case2:str不存在,返回值均为-1;

在这里插入图片描述
regex是正则表达式,比较复杂:
之前一个坑点就是split时,如果以反斜杠进行分割,在regex中切记使用\\\\四个反斜杠!!
在这里插入图片描述

1.4 String与其他类型之间的转换

1.基本数据类型与String之间的转换

String->基本数据类型:借助基本数据类型对应的包装类中的,包装类.parse类型(字符串)实现,比如Integer.parseInt(“123”); 基本数据类型->String:使用String.valueOf(数据)实现,如String.valueOf(123);

2.字符串数组与String之间的转换
一般Java中涉及到区间,均为左闭右开区间;
在这里插入图片描述
3.Byte数组与String之间的转换
此处需要注意不同的编码集所表现的效果可能不同!!
字节数组->字符串时可指定解码的字符集,使用new String(byte[],String charsetName)
编写程序时需要注意,编码字符集与解码字符集需要保持一致,否则会出现乱码!!
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

2. StringBuilder类、StringBuffer类:可变字符序列

String、StringBuilder、StringBuffer三者的相同点与不同点?

不同点:

String:不可变的字符序列;
StringBuffer:可变的字符序列;线程安全,效率低;JDK5.0
StringBuilder:可变的字符序列;线程不安全,效率高;JDK5.0新增的类;

相同点:

均与字符串操作相关,且底层均使用char型数组存储数据;

StringBuilder/StringBuffer内容可变的原因:
使用无参构造StringBuilder()时,会默认开辟长度为16的char型数组value,用于后续进行数据添加;
使用有参构造StringBuilder(String str)时,会开辟长度为str.length()+16的char型数组value,用于后续进行数据添加;
在数据append时,发现此时的value数组不足以存储数据,则需要进行数组扩容操作1)默认将数组容量扩充到原始大小的2倍+2;2)将数组原始内容复制到扩充后的数组中;
已知可变字符序列在内容新增时可能出现数组扩容操作,而扩容操作涉及到数组内容复制,效率较低故我们在使用StringBuilder/StringBuffer时,可以在最开始实例化对象时使用有参构造StringBuilder(int capacity),在最开始就创建一个大小合适的value数组,尽量避免数组扩容带来的负面影响。
在这里插入图片描述

在这里插入图片描述

StringBuilder/StringBuffer常用方法:
二者提供的方法一致,其使用方法统一,区别在于StringBuffer线程安全:
在这里插入图片描述
在这里插入图片描述

三者效率关系:
StringBuilder>StringBuffer>String

资料来源:尚硅谷

相关文章:

Java中的String类

String类1.String类1.1 特性1.2 面试题1.3 常用方法1.4 String与其他类型之间的转换2. StringBuilder类、StringBuffer类&#xff1a;可变字符序列1.String类 1.1 特性 String类为final类&#xff0c;不可被继承&#xff0c;代表不可变的字符序列&#xff1b; 实现了Serializ…...

【java】笔试强训Day3【在字符串中找出连续最长的数字串与数组中出现次数超过一半的数字】

目录 ⛳选择题 1.以下代码运行输出的是 2.以下程序的输出结果为 3.下面关于构造方法的说法不正确的是 ( ) 4.在异常处理中&#xff0c;以下描述不正确的有&#xff08; &#xff09; 5.下列描述中&#xff0c;错误的是&#xff08; &#xff09; 6.…...

一文7个步骤从0到1教你搭建Selenium 自动化测试环境

【导语】Selenium是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中&#xff0c;就像真正的用户在操作一样。支持自动录制动作和自动生成 .Net、Java、Perl等不同语言的测试脚本。本文详细介绍了搭建自动化测试环境所需的工具&#xff0c;让你学习自动化测试不…...

Oracle目录应急清理

Oracle目录应急清理清理错误位置的归档日志清理30天前的监听告警日志清理监听日志清理30天以前的trace文件清理30天以前的审计日志清理错误位置的归档日志 检查$ORACLE_HOME/dbs下是否有归档文件&#xff1a; ls $ORACLE_HOME/dbs/arch* | wc -l检查和修改归档位置&#xff1…...

使用 OBS 进行区域录制

1. OBS 与区域录屏 实际上 OBS 的使用场景可谓是与区域录屏格格不入的。 虽然我们依旧有一些办法在 OBS 中达到区域录屏的目的&#xff0c;但其操作实在过于繁琐&#xff0c;还不如直接使用 QQ 或者 Windows 最新的自带截屏录屏来进行区域录屏来的方便实在。 但若非常强烈的…...

aws eks 配置授权额外的用户和角色访问集群

参考资料 https://github.com/kubernetes-sigs/aws-iam-authenticator#full-configuration-formathttps://docs.amazonaws.cn/zh_cn/eks/latest/userguide/add-user-role.html 众所周知&#xff0c;aws eks使用 Authenticator 或者 aws 命令来进行账户级别的用户和角色的授权…...

MagicalCoder可视化开发平台:轻松搭建业务系统,为企业创造更多价值

让软件应用开发变得轻松起来&#xff0c;一起探索MagicalCoder可视化开发工具的魔力&#xff01;你是否为编程世界的各种挑战感到头痛&#xff1f;想要以更高效、简单的方式开发出专业级的项目&#xff1f;MagicalCoder低代码工具正是你苦心寻找的产品&#xff01;它是一款专为…...

8个不能错过的程序员必备网站,惊艳到我了!!!

程序员是一个需要不断学习的职业&#xff0c;不少朋友每天来逛CSDN、掘金等网站&#xff0c;但一直都抱着“收藏从未停止&#xff0c;学习从未开始”的态度&#xff0c;别骗自己了兄弟。在编程体系中&#xff0c;有很多不错的小工具&#xff0c;可以极大得提升我们的开发效率。…...

Mybatis(二):实现“增删改查”

Mybatis&#xff08;二&#xff09;&#xff1a;实现“增删改查”前言一、MyBatis的增删改查1、添加2、修改3、删除4、查询4.1 查询一个实体4.1 查询集合二、MyBatis获取参数值的两种方式&#xff08;重点&#xff09;1、单个字面量类型的参数2、多个字面量类型的参数3、map集合…...

Faster RCNN 对血液细胞目标检测

目录 1. 介绍 2. 工具函数介绍 utils 2.1 xml 文件的读取 get_label_from_xml 2.2 绘制边界框 draw_bounding_box...

【数据结构】Java实现栈

目录 1. 概念 2. 栈的使用 3. 自己动手实现栈&#xff08;使用动态数组实现栈&#xff09; 1. 创建一个MyStack类 2. push入栈 3. pop出栈 4. 查看栈顶元素 5. 判断栈是否为空与获取栈长 6. toString方法 4. 整体实现 4.1 MyStack类 4.2 Test类 4.3 测试结果 1.…...

【数据结构】排序

作者&#xff1a;✿✿ xxxflower. ✿✿ 博客主页&#xff1a;xxxflower的博客 专栏&#xff1a;【数据结构】篇 语录&#xff1a;⭐每一个不曾起舞的日子&#xff0c;都是对生命的辜负。⭐ 文章目录1.排序1.1排序的概念1.2常见的排序算法2.常见排序算法2.1插入排序2.1.1直接插入…...

过拟合、验证集、交叉验证

过拟合 简单描述&#xff1a;训练集误差小&#xff0c;测试集误差大&#xff0c;模型评估指标的方差&#xff08;variance&#xff09;较大&#xff1b; 判断方式&#xff1a; 1、观察 train set 和 test set 的误差随着训练样本数量的变化曲线。 2、通过training accuracy 和…...

原力计划来了【协作共赢 成就未来】

catalogue&#x1f31f; 写在前面&#x1f31f; 新星计划持续上新&#x1f31f; 原力计划方向&#x1f31f; 原力计划拥抱优质&#x1f31f; AIGC&#x1f31f; 参加新星计划还是原力计划&#x1f31f; 创作成就未来&#x1f31f; 写在最后&#x1f31f; 写在前面 哈喽&#x…...

一文了解Jackson注解@JsonFormat及失效解决

背景 项目中使用WRITE_DATES_AS_TIMESTAMPS: true转换日期格式为时间戳未生效。如下&#xff1a; spring:jackson:time-zone: Asia/Shanghaiserialization:WRITE_DATES_AS_TIMESTAMPS: true尝试是否关于时间的注解是否会生效&#xff0c;使用JsonForma和JsonFiled均失效。 常…...

webpack——使用、分析打包代码

世上本无nodejs js最初是在前端浏览器上运行的语言&#xff0c;js代码一旦脱离了浏览器环境&#xff0c;就无法被运行。直到nodejs的出现&#xff0c;我们在电脑上配置了node环境&#xff0c;就可以让js代码脱离浏览器&#xff0c;在node环境中运行。 浏览器不支持模块化 nodej…...

libvirt零知识学习5 —— libvirt源码编译安装(3)

接前一篇文章libvirt零知识学习4 —— libvirt源码编译安装&#xff08;2&#xff09; 在上篇文章及上上篇文章中构建libvirt的时候遇到了一个问题“ERROR: Problem encountered: YAJL 2 is required to build QEMU driver”。上篇文章讲到即使安装了相应的YAJL库仍然不能解决问…...

Nmap 的使用教程

Nmap是一个网络侦测和安全审计工具。它可以用于发现网络上的主机和服务&#xff0c;并提供广泛的信息&#xff0c;其中包括操作系统类型和版本、应用程序和服务的详细信息等。在本文中&#xff0c;我们将介绍如何使用Nmap扫描网络主机&#xff0c;识别开放端口以及进行操作系统…...

async与await异步编程

ECMA2017中新加入了两个关键字async与await 简单来说它们是基于promise之上的的语法糖&#xff0c;可以让异步操作更加地简单明了 首先我们需要用async关键字&#xff0c;将函数标记为异步函数 async function f() {} f()异步函数就是指&#xff1a;返回值为promise对象的函…...

移动应用架构设计:如何转变开发流程

移动应用架构设计&#xff1a;如何转变开发流程 2023 年掌握移动应用程序架构的指南&#xff08;附案例研究&#xff09; 如果他们要解决这个问题&#xff0c;开发人员需要了解移动架构设计的最佳实践&#xff0c;使他们能够构建用户喜欢的优化应用程序。其中一些做法包括使用…...

中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试

作者&#xff1a;Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位&#xff1a;中南大学地球科学与信息物理学院论文标题&#xff1a;BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接&#xff1a;https://arxiv.…...

理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端

&#x1f31f; 什么是 MCP&#xff1f; 模型控制协议 (MCP) 是一种创新的协议&#xff0c;旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议&#xff0c;它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...

Java 加密常用的各种算法及其选择

在数字化时代&#xff0c;数据安全至关重要&#xff0c;Java 作为广泛应用的编程语言&#xff0c;提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景&#xff0c;有助于开发者在不同的业务需求中做出正确的选择。​ 一、对称加密算法…...

ios苹果系统,js 滑动屏幕、锚定无效

现象&#xff1a;window.addEventListener监听touch无效&#xff0c;划不动屏幕&#xff0c;但是代码逻辑都有执行到。 scrollIntoView也无效。 原因&#xff1a;这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作&#xff0c;从而会影响…...

全志A40i android7.1 调试信息打印串口由uart0改为uart3

一&#xff0c;概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本&#xff1a;2014.07&#xff1b; Kernel版本&#xff1a;Linux-3.10&#xff1b; 二&#xff0c;Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01)&#xff0c;并让boo…...

Unsafe Fileupload篇补充-木马的详细教程与木马分享(中国蚁剑方式)

在之前的皮卡丘靶场第九期Unsafe Fileupload篇中我们学习了木马的原理并且学了一个简单的木马文件 本期内容是为了更好的为大家解释木马&#xff08;服务器方面的&#xff09;的原理&#xff0c;连接&#xff0c;以及各种木马及连接工具的分享 文件木马&#xff1a;https://w…...

【Go语言基础【12】】指针:声明、取地址、解引用

文章目录 零、概述&#xff1a;指针 vs. 引用&#xff08;类比其他语言&#xff09;一、指针基础概念二、指针声明与初始化三、指针操作符1. &&#xff1a;取地址&#xff08;拿到内存地址&#xff09;2. *&#xff1a;解引用&#xff08;拿到值&#xff09; 四、空指针&am…...

【JVM面试篇】高频八股汇总——类加载和类加载器

目录 1. 讲一下类加载过程&#xff1f; 2. Java创建对象的过程&#xff1f; 3. 对象的生命周期&#xff1f; 4. 类加载器有哪些&#xff1f; 5. 双亲委派模型的作用&#xff08;好处&#xff09;&#xff1f; 6. 讲一下类的加载和双亲委派原则&#xff1f; 7. 双亲委派模…...

2025年渗透测试面试题总结-腾讯[实习]科恩实验室-安全工程师(题目+回答)

安全领域各种资源&#xff0c;学习文档&#xff0c;以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具&#xff0c;欢迎关注。 目录 腾讯[实习]科恩实验室-安全工程师 一、网络与协议 1. TCP三次握手 2. SYN扫描原理 3. HTTPS证书机制 二…...

【MATLAB代码】基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),附源代码|订阅专栏后可直接查看

文章所述的代码实现了基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),针对传感器观测数据中存在的脉冲型异常噪声问题,通过非线性加权机制提升滤波器的抗干扰能力。代码通过对比传统KF与MCC-KF在含异常值场景下的表现,验证了后者在状态估计鲁棒性方面的显著优…...