如何理解String的不可变性

一、缓存角度

在Java中对于字符串的处理,是利用字符串池去存储Java中的字符串,在字符串池中,俩个内容相同的字符串变量,可以从池中指向同一个对象,这样就节省了空间资源。

public class Main {public static void main(String[] args) {String str1 ="abcd";String str2 =str1;System.out.println(str1);System.out.println(str2);}
}

在上述代码中,我们能看到的是str1是赋值给了str2,实际上都指向的是池中的同一个对象。

我们在下述debug中能看到,byte数组存的都是一样的ASCLLl码值。

如果str1的内容被修改了,那么必然导致str2的内容也会变动,所以在String类中,所有关于修改字符串的方法其实本质上是new的新对象。

具体可以看这篇可变性的讲解:https://blog.csdn.net/rnnf_yyds/article/details/140599511?spm=1001.2014.3001.5501icon-default.png?t=N7T8https://blog.csdn.net/rnnf_yyds/article/details/140599511?spm=1001.2014.3001.5501所以,字符串存在于池中我就去取,不在就另开,这样大大节省空间。

二、安全性

2.1 信息安全

在后端实体类中通常有很多成员变量是String类型,这个时候,如果我们的String是可变的,那么比如像:密码,姓名,地址这样的信息就会被修改,那么这样的信息也就没有安全可言。

2.2 线程安全

当多个线程访问,能够确保字符串是安全的,线程安全就是要保证多个共享变量不被修改。当某个线程更改了值,那么会在字符串池中创建一个新的字符串,而不是修改相同的值,所以在并发环境下,字符串是线程安全的。

三、哈希键值对

当String被用作HashMap或HashSet等集合的键时,由于其不可变特性,一旦放入集合中,其哈希值就不会改变,保证了集合操作的正确性和高效性。(hashCode方法在String类中被重写,在第一次调用期间计算和缓存散列,并返回相同的值)

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

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

相关文章

web服务器测试

[rootlocalhost ~]# vim /etc/nginx/conf.d/test_ test_ip.conf test_name.conf test_virtualdir.conf [rootlocalhost ~]# vim /etc/nginx/conf.d/test_name.conf [rootlocalhost ~]# tree /www/

【学习笔记】无人机系统(UAS)的连接、识别和跟踪(五)-无人机跟踪

目录 引言 5.3 无人机跟踪 5.3.1 无人机跟踪模型 5.3.2 无人机位置报告流程 5.3.3 无人机存在监测流程 引言 3GPP TS 23.256 技术规范,主要定义了3GPP系统对无人机(UAV)的连接性、身份识别、跟踪及A2X(Aircraft-to-Everyth…

HarmonyOS应用开发者高级认证,Next版本发布后最新题库 - 单选题序号3

基础认证题库请移步:HarmonyOS应用开发者基础认证题库 注:有读者反馈,题库的代码块比较多,打开文章时会卡死。所以笔者将题库拆分,单选题20个为一组,多选题10个为一组,题库目录如下,…

MySQL0.MSI方式安装

本机运行环境:Windows10 1.下载 进入MySQL官方下载页面:https://downloads.mysql.com/archives/installer/ 红色箭头:点击选择下载的版本 黄色箭头:点击下载MSI安装包 此次下载选择MySQL8.0.37的MSI安装包 2.安装 下载完毕后…

AJAX复习总结

AJAX复习总结 AJAX即“Asynchronous JavaScript and XML”(异步的JavaScript与XML技术),是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。简单来说,AJAX就是让网页变得更快、更灵活的一种方法 举个例子&#xff1a…

水表数字识别3:Pytorch CRNN实现水表数字识别(含训练代码和数据集)

水表数字识别3:Pytorch CRNN实现水表数字识别(含训练代码和数据集) 目录 水表数字识别3:Pytorch CRNN实现水表数字识别(含训练代码和数据集) 1.前言 2. 水表数字识别的方法 3. 水表数字识别数据集 4. 水表数字分割模型训练 5. 水表数字识别模型训…

Qt中 .pro、.pri、.prf、.prl文件简解

一、pro文件 .pro就是工程文件(project),是Qt项目的主配置文件,用于描述整个项目的基本信息和编译配置。在Qt中用qmake生成makefile文件,它是由.pro文件生成而来的,.pro文件的具体格式语法如下&#xff1a…

Linux 显示文件行号命令

cat (可能要搭配grep 进行过滤) vi 或 vim (缺点可能会因为粗心,改动文件,如果要修改当没说)

分布式系列之ID生成器

背景 在分布式系统中,当数据库数据量达到一定量级后,需要进行数据拆分、分库分表操作,传统使用方式的数据库自有的自增特性产生的主键ID已不能满足拆分的需求,它只能保证在单个表中唯一,所以需要一个在分布式环境下都…

昇思25天学习打卡营第23天 | 基于MindSpore的红酒分类实验

学习心得:基于MindSpore的红酒分类实验 在机器学习的学习路径中,理解和实践经典算法是非常重要的一步。最近我进行了一个有趣的实验,使用MindSpore框架实现了K近邻(KNN)算法进行红酒分类。这个实验不仅加深了我对KNN算…

idea如何让包结构分层

文章目录 前言1.选中前项目包结构2.取消后项目包结构3.情况二 前言 在大型项目中,代码的分层管理至关重要。IDEA编辑器提供了强大的package分层结构功能,帮助开发者更好地组织和管理代码。通过合理配置,我们可以清晰地看到各个package之间的…

stm32平台为例的软件模拟时间,代替RTC调试

stm32平台为例的软件模拟时间,代替RTC调试 我们在开发项目的时候,如果用到RTC,如果真正等待RTC到达指定的时间,那调试时间就太长了。 比如每隔半个小时,存储一次数据,如果要观察10次存储的效果&#xff0…

在服务器调用api操作rabbitmq

不同的rabbitmq版本可能api不同,仅做参考,RabbitMQ 3.7.18。同时,我基本没看官方api文档,根据rabbitmq客户端控制台调用接口参数来决定需要什么参数。例如: 1、添加用户 curl -u 用户名:密码 -H “Content-Type: a…

蓝屏死机不再怕!CrowdStrike故障修复指南中心上线!

系统之家于7月22日发出最新报道,安全公司CrowdStrike因其Windows更新引发全球 850 万台电脑蓝屏死机问题后,上线了全新的“修复和指南中心”(Remediation and Guidance Hub),该中心汇集了与其错误更新相关的详细信息&a…

Android音视频—OpenGL 与OpenGL ES简述,渲染视频到界面基本流程

文章目录 OpenGL 简述特点和功能主要组件OpenGL ES当前状态 OpenGL ES 在 Android 上进行视频帧渲染总体流程 OpenGL 简述 OpenGL(Open Graphics Library)是一个跨平台的、语言无关的应用程序编程接口(API),用于开发生…

基于FPGA的数字信号处理(18)--半加器和全加器

前言 在数字系统中,加法运算是最常见的算术运算,同时它也是进行各种复杂运算的基础。 半加器 最简单的加法器叫做 半加器(Half Adder),它将2个输入1bit的数据相加,输出一个2bits的和,和的范围为…

航片转GIS数据自动化管线

近年来,计算机视觉领域的进步已显著改善了物体检测和分割任务。一种流行的方法是 YOLO(You Only Look Once)系列模型。YOLOv8 是 YOLO 架构的演进,兼具准确性和效率,是各种应用的绝佳选择,包括分割卫星航拍…

抖音短视频seo矩阵系统源码开发技术分享(二)--SaaS开源

目录 市场背景分析 一、抖音短视频seo矩阵系统开发部署流程 二、 源码开发功能构思 三、 抖音短视频seo源码开发部署注意事项 四、 部分开发代码展示 市场背景分析 抖音短视频seo矩阵系统是通过不同平台不同账号之间建立联系,通过将同一品牌下不同平台不同账号…

currentTarget和target

*.wxml *.js 点击按钮 发现 currentTarget 获取的是事件绑定者的参数 target 获取的是事件触发者的参数

ZYNQ 入门笔记(零):概述

文章目录 引言产品线Zynq™ 7000 SoCZynq UltraScale™ MPSoCZynq UltraScale RFSoCVersal™ Adaptive SoC 开发环境 引言 Xilinx FPGA 产品线从经济型的 Spartan、Artix 系列到高性能的 Kintex、Virtex、Versal 系列,可以说涵盖了 FPGA 的绝大部分应用场景&#x…