为什么String要被设置为不可变类?百日百题(2/100)

2023-11-16

问题引入

        我们学习了String的数据类型,知道了String类型一旦生成就不会再发生改变,这就是他的不可变性,也就意味着每次修改都会产生一个新的String变量,对性能影响较大,StringBuilder和StringBuffer产生的对象底层是一个没有被final修饰的数组,可以进行修改并且不产生新的对象,那么为什么还要用String类型,直接用后者不就行了?

        实际上是这一种效果,修改会创建新的对象,原来的值会在线程池中等被java的垃圾回收机制回收。

字符串常量池

 没次创建对象的时候都会先从字符串常量池中寻找有没有元素,如果没有就直接创建,如果有就直接引用,节省了空间和时间。

思考

        1.如果String类型设置为可变的,那么S1通过引用修改值,就会造成S2的改变,这不是我们所希望的。所以这就是String为什么被设置为不可变的第一点。

        2.可以当作hashmap的key,如果String发生变化,那么对应的hash值也会发生变化,如果再用原来的key寻找就找不到对应的value了

        3.缓存hashcode,对象一旦被创建hashcode的值也不会发生变化,系统自动将hashcode缓存,当我们想用到hashcode的时候就不用重新计算了,而是直接获取,如果String对象可变,那么每一次使用hashcode的时候都要重新计算,影响到性能的问题。

        4.能够天然的保证线程安全。

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

为什么String要被设置为不可变类?百日百题(2/100) 的相关文章

  • 使用 Intellij Idea 和 gradle 在应用程序引擎上调试 localhost

    我正在使用 IntelliJ 社区添加并使用 Gradle 构建应用程序引擎标准环境应用程序 在迁移到 IntelliJ 和端点框架之前 我使用的是 Android Studio 我无法调试我的本地主机 我添加了 jvmFlags 如下所述
  • 在java中轮询Http服务器(重复发送http get请求)

    当对其进行 REST 调用时 我的 Web 服务器会发送一些信息 我想不断轮询该服务器 间隔5秒后重复发送HTTP GET请求 以检查返回的信息是否有任何变化 做到这一点最有效的方法是什么 您能提供一些代码示例吗 请注意 我只想开发客户端代
  • 带路径压缩算法的加权 Quick-Union

    有一种 带路径压缩的加权快速联合 算法 代码 public class WeightedQU private int id private int iz public WeightedQU int N id new int N iz new
  • 如何在 JavaFX 中连接可观察列表?

    我所说的串联是指获得一个新列表 该列表侦听所有串联部分的更改 方法的目的是什么FXCollections concat ObservableList
  • 两个整数乘积的模

    我必须找到c c a b mod m a b c m 是 32 位整数 但 a b 可以超过 32 位 我正在尝试找出一种计算 c 的方法 而不使用 long 或任何 gt 32 位的数据类型 有任何想法吗 如果m是质数 事情可以简化吗 注
  • java inputstream 打印控制台内容

    sock new Socket www google com 80 out new BufferedOutputStream sock getOutputStream in new BufferedInputStream sock getI
  • Runtime.exec 处理包含多个空格的参数

    我怎样才能进行以下运行 public class ExecTest public static void main String args try Notice the multiple spaces in the argument Str
  • 将非 Android 项目添加到 Android 项目

    我在 Eclipse 中有三个项目 Base Server 和 AndroidClient Base和Server是Java 1 7项目 而AndroidClient显然是一个android项目 基础项目具有在服务器和 Android 客户
  • Java Applet 中的 Apache FOP - 未找到数据的 ImagePreloader

    我正在研究成熟商业产品中的一个问题 简而言之 我们使用 Apache POI 库的一部分来读取 Word DOC 或 DOCX 文件 并将其转换为 XSL FO 以便我们可以进行标记替换 然后 我们使用嵌入到 Java 程序中的 FOP 将
  • 如何在 ant 中为 junit 测试设置 file.encoding?

    我还没有完全完成file encoding 和 ant https stackoverflow com questions 1339352 how do i set dfile encoding within ants build xml
  • Akka 与现有 java 项目集成的示例

    如果我已经有现有的javaWeb 应用程序使用spring and servlet容器 将 Akka 集成到其中的正确方法是什么 就像我将会有Actor1 and Actor2互相沟通的 开始使用这些演员的切入点是什么 例如 1 把它放在那
  • 如何在.NET中使用java.util.zip.Deflater解压缩放气流?

    之后我有一个转储java util zip Deflater 可以确认它是有效的 因为 Java 的Inflater打开它很好 并且需要在 NET中打开它 byte content ReadSample sampleName var inp
  • 在 Java 中获取并存储子进程的输出

    我正在做一些需要我开始子处理 命令提示符 并在其上执行一些命令的事情 我需要从子进程获取输出并将其存储在文件或字符串中 这是我到目前为止所做的 但它不起作用 public static void main String args try R
  • 不可变的最终变量应该始终是静态的吗? [复制]

    这个问题在这里已经有答案了 在java中 如果一个变量是不可变的并且是final的 那么它应该是一个静态类变量吗 我问这个问题是因为每次类的实例使用它时创建一个新对象似乎很浪费 因为无论如何它总是相同的 Example 每次调用方法时都会创
  • 部署 .war 时出现 Glassfish 服务器错误:部署期间发生错误:准备应用程序时出现异常:资源无效

    我正在使用以下内容 NetBeans IDE 7 3 内部版本 201306052037 爪哇 1 7 0 17 Java HotSpot TM 64 位服务器虚拟机 23 7 b01 NetBeans 集成 GlassFish Serve
  • 手动设置Android Studio的JDK路径

    如何为 Android Studio 使用自定义 JDK 路径 我不想弄乱 PATH 因为我没有管理员权限 是否有某个配置设置文件允许我进行设置 如果您查看项目设置 您可以从那里访问 jdk 在标准 Windows 键盘映射上 您可以在项目
  • Hibernate 本机查询 - char(3) 列

    我在 Oracle 中有一个表 其中列 SC CUR CODE 是 CHAR 3 当我做 Query q2 em createNativeQuery select sc cur code sc amount from sector cost
  • Java 正则表达式中的逻辑 AND

    是否可以在 Java Regex 中实现逻辑 AND 如果答案是肯定的 那么如何实现呢 正则表达式中的逻辑 AND 由一系列堆叠的先行断言组成 例如 foo bar glarch 将匹配包含所有三个 foo bar 和 glarch 的任何
  • Android View Canvas onDraw 未执行

    我目前正在开发一个自定义视图 它在画布上绘制一些图块 这些图块是从多个文件加载的 并将在需要时加载 它们将由 AsyncTask 加载 如果它们已经加载 它们只会被绘制在画布上 这工作正常 如果加载了这些图片 AsyncTask 就会触发v
  • 抛出 Java 异常时是否会生成堆栈跟踪?

    这是假设我们不调用 printstacktrace 方法 只是抛出和捕获 我们正在考虑这样做是为了解决一些性能瓶颈 不 堆栈跟踪是在构造异常对象时生成的 而不是在抛出异常对象时生成的 Throwable 构造函数调用 fillInStack

随机推荐

  • 数字经济专家高泽龙谈“金融元宇宙”与“元宇宙金融”

    开始聊所有话题之前 必须先说说 金融元宇宙 或者 元宇宙金融 的概念和定义 当然 前提是搞清楚 金融 和 元宇宙 百度百科中 金融 的定义 金融 Finance Finaunce 是市场主体利用金融工具将资金从资金盈余方流向资金稀缺方的经济
  • Python读取文件时出现UnicodeDecodeError: 'gbk' codec can't decode byte 0x80 in position xx: 解决方案

    Python在读取文件时 with open article txt as f 打开新的文本 text new f read 读取文本数据 出现错误 UnicodeDecodeError gbk codec can t decode byt
  • electron autoUpdater热更新

    最近创建了一个electron vue项目 用到了热更新 先看效果图 话不多说 直接上代码 main目录下创建update js 代码如下 安装包helatest yml所在服务器地址 const uploadUrl http 127 0
  • 金山WPS暑期实习招聘笔试题2013-7-28

    C 试卷B卷 应聘职位1 2 姓 名 性 别 学 位 所在院校 所学专业 联系电话 电子邮件 毕业时间 获知招聘信息渠道 说明 答题时间为 100 分钟 自我判断题 请选择最符合您本人意愿的一项 1 你
  • 从项目实施层面解析STEAM教育

    转自 https baijiahao baidu com s id 1614434815561381532 wfr spider for pc 一 引言 近几年大家常常听到STEAM教育这个词 似乎一夜之间所有的培训机构的课程都变成了STE
  • 第9章_瑞萨MCU零基础入门系列教程之SCI I2C

    本教程基于韦东山百问网出的 DShanMCU RA6M5开发板 进行编写 需要的同学可以在这里获取 https item taobao com item htm id 728461040949 配套资料获取 https renesas do
  • Android-SharedPreferences实现记住密码和自动登录

    效果图 第一次进入进来 勾选记住密码和自动登录成功后 第二次进来 说明 中间存在的图片或者多余的其他部分可删掉 留下最主要的填写部分和登陆按钮即可 功能还是可以实现的 XML文件
  • QQ飞车手游设计分析

    腾讯系竞速手游的逆袭 QQ飞车手游设计分析 前言 这是中山大学数据科学与计算机学院软件工程2019年3D游戏编程与设计的作业1 导语 在中国巨大的游戏市场下 手游战场上的战火从未熄灭 其中以王者荣耀为首的MOBA类手游与以PUBG 现改名和
  • 【Flink Rest-ful API 】

    Flink 有了一些查询job状态指标的API 这些监控 API is a REST ful API 接受 HTTP 请求并返回JSON data 这些监控API以jobManager中web server 为基础 默认其监听端口为8081
  • PHPstudy安装教程

    首先简单介绍一下PHPStudy PHPStudy是一个Windows下的Apache Nginx php MYSQL的集成开发环境 PHPStudy比较适合快速的在windows下部署一个Web开发环境 而且便于安装 部署方便 服务器本身
  • linux环境下安装nginx

    一 准备安装环境 安装nginx需要系统相关插件 所以在安装前先检查哈是否有这些插件 如果没有 则要先安装这些插件 由于笔者是新的虚拟机环境 所以这些插件都没有 都需要安装 读者可以根据自己实际情况进行相关操作 1 安装 gcc gcc c
  • HTML引用公共组件

    在test html引用footer html 效果图 代码 test html div 我是頁面 div div class footer div
  • 《再也不怕elasticsearch》REST API调用

    REST API调用 大家好我是迷途 一个在互联网行业 摸爬滚打的学子 热爱学习 热爱代码 热爱技术 热爱互联网的一切 再也不怕elasticsearch系列 帅途会慢慢由浅入深 为大家剖析一遍 各位大佬请放心 虽然这个系列帅途有时候更新的
  • linux桌面小程序开发日记2(pyqt5+yolov5)

    linux桌面小程序开发日记2 使用Pyqt5 制作一个界面 并连接摄像头 最后一篇博客地址 https blog csdn net Liuchengzhizhi article details 123692365 B站视频 https w
  • VS Code Material Icon Theme插件设置自定义文件夹图标关联

    VS Code Material Icon Theme插件设置自定义文件夹图标关联 方法与分析 自定义文件夹图片命名和位置如下 vscode extensions pkief material icon theme 4 5 0 icons
  • 程序的基本结构

    程序的基本结构 1 顺序结构 2 选择结构 选择结构如下图所示 当条件成立时 执行模块A否则执行模块B 3 循环结构 循环结构又两种形式当型循环和直道型循环 当型循环 先判断条件 条件成立就反复执行程序模块 当条件不成立时结束循环 当型循环
  • Django视图类View源码分析

    Django视图类View源码分析 一 视图函数 django中的视图函数 就是视图功能由函数实现 响应 或渲染模板后返回HTML 或直接返回JSON数据 参数 视图函数的第一个参数必须是request对象 文本响应 from django
  • 纯干货:接口自动化测试的思考和技术实现

    一 思考 什么是自动化测试 自动化测试是把人为驱动转换成计算机驱的测试行为 人对于接口的测试行为 第一步 理解业务需求 一般来说可以从需求理解接口的行为和描述 行为 当什么情况 做什么操作 发生什么事情 描述 情况是什么 操作是什么等 第二
  • Rust- 类型系统

    The type system in Rust is one of its core features supporting a range of different types and providing a powerful syste
  • 为什么String要被设置为不可变类?百日百题(2/100)

    问题引入 我们学习了String的数据类型 知道了String类型一旦生成就不会再发生改变 这就是他的不可变性 也就意味着每次修改都会产生一个新的String变量 对性能影响较大 StringBuilder和StringBuffer产生的对