为什么String类的所有写操作都返回一个新的对象?

1.为了让String类线程安全 。String类使用了不变性模式,不变性模式可以解决多线程并发问题。所谓不变性,就是对象一旦被创建,一旦被赋值,就不允许修改了;没有修改操作,也就是保持了不变性。 这样不会出现多个线程对同一个对象的读写操作而出现线程安全问题,因为这个类要么没有写方法,要么写方法返回一个新的对象;(多线程那里会详细讲解)

2.开发过程中,很多String对象都会重复使用,比如IP地址,类名,方法名等等String信息。

而且String是Java最基础的类,大量方法需要使用String类,为了提升性能,需要将String对象缓存下来。 (缓存是提升性能最重要的手段)如果缓存中有需要的String对象,则直接返回缓存的数据,如果没有则创建对象,并将新的String对象加入到缓存中。如果String的所有写方法修改的是当前值,而不是返回一个新对象,那么缓存的数据会出现丢失和重复的问题,那缓存的意义在哪里?

所以为了保证String类线程安全和缓存数据不出现问题,需要将String的写操作返回一个新的对象。

如果面试官问为什么缓存的数据会出现丢失和重复的问题? 可以这么回答。

比如:内存缓存了"a","b","c" 3个字符串,如果String的所有写方法修改的是当前值,而不是返回一个新对象。

case1: 线程1需要字符串"a",缓存有,则直接返回缓存的字符串"a"。线程2从缓存获取到字符串"a",并将字符串"a"修改成"d",那么内存现在缓存的是"b","c","d",字符串"a"丢失,但是线程1从缓存获取到的是字符串"a",需要的也是字符串"a",现在将其修改成了"d",线程1出现问题,缓存的数据出现了丢失。

case2 :方法2从缓存获取到字符串"a",并将字符串"a"修改成"c",那么内存现在缓存的是"b"、"c","c", 缓存了重复数据。

当然可以添加控制层,线程更新缓存数据的时候,1:先去判断缓存数据是否有被其他线程引用 2:更新完成后缓存数据是否会出现重复。 有引用或者重复则当前线程更新缓存失败。添加缓存的目的就是为了提升性能,控制层逻辑说不定比创建一个新对象时间花费还要多,失去了缓存的意义。

所以String的写方法返回一个新的String对象,而不是修改当前值。

全部评论

相关推荐

04-18 16:14
已编辑
门头沟学院 Java
1. 介绍实习做了什么项目,开发了什么功能2. CountdownLatch底层原理是否了解3. JVM内存新生代是通过什么策略转移到老年代的?4. 什么类型的对象,或者对 对象使用什么用法,这个对象容易直接进入老年代5. 有什么方法可以让对象尽可能在新生代回收6. 消息队列,消费者消费消息失败,重试的策略是怎么样的7. 垃圾回收器CMS和G1挑一个熟悉的,说说整体的垃圾回收过程8. concurrenthashmap如何实现线程安全9. 多个线程对同一资源进行操作,有什么方法能够保证线程安全,并说说哪种性能好坏10. MySQL事务提交等级有哪些11. 主键索引,普通索引,唯一索引。 在底层数据结构存储方面,有什么区别12. MySQL使用索引去查询数据的过程13. kafka和rabbitmq的区别14. redis的数据结构有哪些?15. Redis的部署方式有几种,有什么区别?16. redis存储有序的集合,该使用什么数据结构17. springboot的启动过程18. spring 切面的底层实现原理反问问了下学习ai技术的建议,面试官回答:我觉得可以从两方面来考虑,第一个来说的话,就是你可以尝试用 AI 编码,就是这个其实对你个人来说还是比较有帮助的,就是让 AI 去实现一些代码开发,而且这个目前还是比较成熟的,因为这个的话一方面你其实可以快速地去完成一。一些工作第二个来讲的话,就是你可以去学习一下,就是说,诶?他那边是怎么样去实现一些功能的?比方说你想让他实现一个什么功能,对吧?那他是怎么实现的?就是你有这么一个类似的这么一个,就可以学习一些他的一个一个实现方案之类的,对吧?这是一块,就是我觉得其实未来工作当中其实用到的会越来越多。第二个点来讲的话,我觉得你可以跑一跑目前比较主流的这么一些 AI 相关的一些模型也好,或者说是一些模式,像Minus,对吧?反正各种东西都可以尝试一下,因为目前这块来讲的话,其实整体的一个使用成本还是很低的,就是很容门槛还是很低的,其实比较容易上手。然后最好就是如果有条件的话,你可以稍微深入去学习一下他的一些。嗯,逻辑就是原理,对吧?这虽然不一定能太深入地去探究,但至少它简单地怎么样去实现的。比方说它内部包含哪些模块什么的,就这些机制上的可以你了解一下,包括像你矫枉自身的一些东西,其实也可以去学习学习了解。
查看18道真题和解析
点赞 评论 收藏
分享
评论
2
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务