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

三张图彻底了解Java中字符串的不变性

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

定义一个字符串

String s = "abcd";

String-Immutability-1

s中保存了string对象的引用。下面的箭头可以理解为“存储他的引用”。

使用变量来赋值变量

String s2 = s;

String-Immutability-2

s2保存了相同的引用值,因为他们代表同一个对象。

字符串连接

s = s.concat("ef");

string-immutability

s中保存的是一个重新创建出来的string对象的引用。

总结

一旦一个string对象在内存(堆)中被创建出来,他就无法被修改。特别要注意的是,String类的所有方法都没有改变字符串本身的值,都是返回了一个新的对象。

如果你需要一个可修改的字符串,应该使用StringBuffer 或者 StringBuilder。否则会有大量时间浪费在垃圾回收上,因为每次试图修改都有新的string对象被创建出来。

转载于:https://my.oschina.net/u/3721254/blog/1610107

相关文章:

  • 没有方法异常NoSuchMethodException
  • Java 实战开发之spring、logback配置及chrome开发神器(六)
  • Elasticsearch 5.5.1-head插件安装
  • 学习OpenGL ES之教你实现SkyBox
  • windows下安装rabbitmq以及php扩展amqp
  • python 反射
  • 01. Consul 入门
  • 程序员行话(黑话)汇总
  • ZJOI2006 书架
  • sdfasdf
  • 设计模式六大原则
  • 10.15 iptables filter表案例 10.16/10.17/10.18 iptable
  • 前端工程化(Gulp、Webpack)-webpack
  • Squirrel GUI+ Phoenix 连接Hbase
  • 集群介绍,keepalived介绍,用keepalived配置高可用集群
  • 230. Kth Smallest Element in a BST
  • cookie和session
  • CSS中外联样式表代表的含义
  • SegmentFault 2015 Top Rank
  • Vim Clutch | 面向脚踏板编程……
  • Vue ES6 Jade Scss Webpack Gulp
  • Vue.js-Day01
  • 服务器从安装到部署全过程(二)
  • 基于遗传算法的优化问题求解
  • 码农张的Bug人生 - 初来乍到
  • 前端_面试
  • 如何实现 font-size 的响应式
  • 如何使用Mybatis第三方插件--PageHelper实现分页操作
  • ​LeetCode解法汇总307. 区域和检索 - 数组可修改
  • ### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException
  • #include到底该写在哪
  • (003)SlickEdit Unity的补全
  • (MATLAB)第五章-矩阵运算
  • (react踩过的坑)Antd Select(设置了labelInValue)在FormItem中initialValue的问题
  • (Repost) Getting Genode with TrustZone on the i.MX
  • (机器学习-深度学习快速入门)第三章机器学习-第二节:机器学习模型之线性回归
  • (南京观海微电子)——COF介绍
  • (十六)Flask之蓝图
  • (推荐)叮当——中文语音对话机器人
  • (学习日记)2024.02.29:UCOSIII第二节
  • (原創) 物件導向與老子思想 (OO)
  • (转载)CentOS查看系统信息|CentOS查看命令
  • (转载)hibernate缓存
  • .bat批处理(三):变量声明、设置、拼接、截取
  • .NET Compact Framework 多线程环境下的UI异步刷新
  • .NET Core WebAPI中封装Swagger配置
  • .NET Framework 服务实现监控可观测性最佳实践
  • .NET Framework与.NET Framework SDK有什么不同?
  • .NET/C# 中设置当发生某个特定异常时进入断点(不借助 Visual Studio 的纯代码实现)
  • .Net6使用WebSocket与前端进行通信
  • .netcore如何运行环境安装到Linux服务器
  • .Net的C#语言取月份数值对应的MonthName值
  • .net之微信企业号开发(一) 所使用的环境与工具以及准备工作
  • /proc/vmstat 详解
  • @EventListener注解使用说明