【JavaSE】:String(二):深入String

深入String

  • 一.字符串的存储
  • 二.字符串的不可变性
  • 三.字符串修改
  • 四.StringBuilder和StringBuffer

一.字符串的存储

我们知道双引号里的数据都是字符串常量,储存在字符串常量池当中。

例子

在这里插入图片描述

在这里插入图片描述

直接使用==是比较地址。字符串常量池有一个特点;它会先检查该常量是否已经存在,如果存在则不再新建。在官方文档里实际上是没有字符串常量池的概念,它底层是一个C++的hash表。它准确来说在方法区,而方法区在堆里。

在这里插入图片描述

二.字符串的不可变性

String是一种不可变对象. 字符串中的内容是不可改变。

String类在设计时就是不可改变的,String类实现描述中已经说明了

在这里插入图片描述

String类中的字符实际保存在内部维护的value字符数组中,而value是由private修饰的,所以不能提供[]修改value该图还可以看出:

  1. String类被final修饰,表明该类不能被继承。
  2. value被修饰被final修饰,表明value自身的值不能改变,即不能引用其它字符数组,但是其引用空间中的内容可以修改。

纠正 :网上有些人说:字符串不可变是因为其内部保存字符的数组被final修饰了,因此不能改变。这种说法是错误的,不是因为String类自身,或者其内部value被final修饰而不能被修改。

final修饰类表明该类不想被继承,final修饰引用类型表明该引用变量不能引用其他对象,但是其引用对象中的内容是可以修改的。

三.字符串修改

注意:尽量避免直接对String类型对象进行修改,因为String类是不能修改的,所有的修改都会创建新对象,效率非常低下。

在这里插入图片描述

但是这种方式不推荐使用,因为其效率非常低,中间创建了许多临时对象。虽然看起来只有三个对象,实际上远远不止。

验证一下究竟会产生多少临时对象

1.使用String直接使用+=进行拼接
2.使用StringBuffer调用append进行追加
3.使用StringBuilder调用append进行追加

在这里插入图片描述

在这里插入图片描述

下面就来聊聊StringBuffer和StringBuilder是什么。

四.StringBuilder和StringBuffer

由于String的不可更改特性,为了方便字符串的修改,Java中又提供StringBuilder和StringBuffer类。这两个类大部分功能是相同的,这里介绍 StringBuilder常用的一些方法。

在这里插入图片描述

一些使用例子

在这里插入图片描述

从上述例子可以看出:String和StringBuilder最大的区别在于String的内容无法修改,而StringBuilder的内容可以修改。频繁修改字符串的情况考虑使用StringBuilder。

注意:String和StringBuilder类不能直接转换。如果要想互相转换,可以采用如下原则:
1.String变为StringBuilder: 利用StringBuilder的构造方法或append()方法
2.StringBuilder变为String: 调用toString()方法。

总结

String、StringBuffer、StringBuilder的区别:
1.String的内容不可修改,StringBuffer与StringBuilder的内容可以修改.
2.StringBuffer与StringBuilder大部分功能是相似的
3.StringBuffer采用同步处理,属于线程安全操作;而StringBuilder未采用同步处理,属于线程不安全操作

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LLM-Intro to Large Language Models

LLM some LLM’s model and weight are not opened to user what is? Llama 270b model 2 files parameters file parameter or weight of neural networkparameter – 2bytes, float number code run parameters(inference) c or python, etcfor c, 500 lines code withou…

智能制造热点词汇科普篇——LaaS、SaaS、PaaS

随着智能制造的不断普及,越来越多的制造企业选择进行数字化转型增强自身的综合竞争力。自动化、信息化、智能化是实现数字化转型的三个重要步骤,在进行对企业的充分调研后,选择适合自己的自动化设备、信息化软件,最后与各种智能化…

中介者模式 rust和java的实现

文章目录 中介者模式介绍实现javarustrust仓库 中介者模式 中介者模式(Mediator Pattern)又被称为 调停者模式 。 它定义了一个中介对象来封装一系列对象之间的交互关系。 中介者使各个对象之间不需要显式地相互引用,从而使耦合性降低&#…

VMware Workstation unrecoverable error: (vmx)

问题: 我将虚拟机挂起后,电脑关机了,再打开时无法恢复虚拟机,查看日志后发现以下错误 2023-12-04T00:35:53.070Z In(05) vmx Msg_Post: Error 2023-12-04T00:35:53.070Z In(05) vmx [msg.log.error.unrecoverable] VMware Workstation unrecoverable error: (vmx) 2023-12-04T…

计算机网络扫盲(4)——时延

一、概述 在这里,我们考虑分组交换网的情况,因特网可以被看成是一种基础设施,该基础设施为运行在端系统上的分布式应用提供服务。在理想情况下,我们希望因特网服务能够在任意两个端系统之间随心所欲地移动数据而没有任何数据地丢失…

韩语图片文字如何转为纯文本?

如何将上图为韩语的图片转为文本文件?这个需要用到OCR程序,操作方法如下: 一、打开金鸣识别网站。 二、点击“点击添加图片/PDF”,将待识别的图片添加到列表。 三、识别模块点选“通用文字”,输出格式选择“纯文本输出…

陀螺仪LSM6DSV16X与AI集成(1)----轮询获取陀螺仪数据

陀螺仪LSM6DSV16X与AI集成.1--轮询获取陀螺仪数据 概述视频教学样品申请通信模式管脚定义IIC通信模式速率生成STM32CUBEMX串口配置IIC配置CS和SA0设置串口重定向参考程序初始换管脚获取ID复位操作BDU设置设置量程和速率配置过滤链轮询读取数据主程序演示 概述 本文将介绍如何使…

脏读、不可重复读、幻读

一、脏读 A事务读取B事务尚未提交的数据,此时如果B事务发生错误并执行回滚操作,那么A事务读取到的数据就是脏数据。就好像原本的数据比较干净、纯粹,此时由于B事务更改了它,这个数据变得不再纯粹。这个时候A事务立即读取了这个脏…

Python链表排序相关问题解法

1 问题 链表实现选择排列中经常会遇到一些问题,那么该如何解决它们呢? 2 方法 这一类问题的基本都是根据题目给定的条件,对链表进行各种组合,如:基于归并排序思想,根据节点的数值,合并两个链表&…

PPT设置背景颜色

问题描述:PPT如何设置背景颜色? 问题解决:设计→设置背景格式→颜色→蓝色(最好选择看着比较舒服的颜色)

131. 分割回文串

题目描述 给你一个字符串 s,请你将 s 分割成一些子串,使每个子串都是 回文串 。返回 s 所有可能的分割方案。 回文串 是正着读和反着读都一样的字符串。 示例 1: 输入:s "aab" 输出:[["a",&q…

数据库SQL中的三个语句:DROP、TRUNCATE 、DELETE 以上三种的区别? 效率?

数据库SQL中的三个语句:DROP、TRUNCATE 、DELETE 以上三种的区别? 效率? DROP、TRUNCATE和DELETE是数据库SQL中用于删除数据或表的三种不同语句,它们之间有以下区别: 1. DROP: - DROP用于删除整个表…

如何通过缺口发现短线机会?

一、认识缺口形态 新手一开始接触技术分析,可能都以为“缺口”是一个很高深的技术形态。其实缺口很简单,就是K线图中的价格空白区域,也就是股价上涨或下跌的过程中,跳过了这个价格。根据跳空的方向不同,缺口可以分为向…

AArch64中的虚拟化

运行在EL2或更高级别的软件具有对虚拟化的几个控制权限: • 第二阶段翻译(Stage 2 translation) • EL1/0指令和寄存器访问trapping • 虚拟异常生成 非安全状态和安全状态下的异常级别(ELs)如下图所示: 在…

Mongodb与MySQL的异同,使用场景,优缺点。。。

Mongodb与MySQL的使用场景有什么不同?列出详细异同及各自的优缺点? 两者对内在的要求如何? MongoDB与MySQL是两种不同类型的数据库管理系统,它们在使用场景、优缺点和内在要求上有很大的不同。 使用场景的不同: Mong…

二分查找算法:搜索有序数组中目标元素的利器

🚀 作者主页: 有来技术 🔥 开源项目: youlai-mall 🍃 vue3-element-admin 🍃 youlai-boot 🌺 仓库主页: Gitee 💫 Github 💫 GitCode 💖 欢迎点赞…

解决从cmake编译TensorRT头文件找不到无法调试问题

正常情况下配置c_cpp_properties.json文件 {"configurations": [{"name": "Linux","includePath": ["${workspaceFolder}/**","/home/sang/packages/TensorRT-8.5.1.7/include" ],"defines&…

uniapp长按图片识别二维码

引用&#xff1a;https://blog.csdn.net/weixin_48596030/article/details/125405779 <image :src"url" mode"widthFix" click.self"previewImage" show-menu-by-longpress"true" style"width: 350rpx;"></image…

每周一算法:背包问题(二)完全背包

完全背包 有 N N N件物品和一个容量是 M M M的背包。每种物品都有无限件可用。第 i i i件物品的体积是 v i v_i vi​&#xff0c;价值是 w i w_i wi​。 求解将哪些物品装入背包&#xff0c;可使这些物品的总体积不超过背包容量&#xff0c;且总价值最大。 输出最大价值。…

SAP_ABAP_RZ11解决SAP运行超时问题 TIME_OUT / rdisp/scheduler/prio_high/max_runtime

SAP ABAP 顾问&#xff08;开发工程师&#xff09;能力模型_Terry谈企业数字化的博客-CSDN博客文章浏览阅读510次。目标&#xff1a;基于对SAP abap 顾问能力模型的梳理&#xff0c;给一年左右经验的abaper 快速成长为三年经验提供超级燃料&#xff01;https://blog.csdn.net/j…