博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
为什么Java的string类要设成immutable(不可变的)
阅读量:6113 次
发布时间:2019-06-21

本文共 585 字,大约阅读时间需要 1 分钟。

hot3.png

 

最流行的Java面试题之一就是:什么是不可变对象(immutable object),不可变对象有什么好处,在什么情况下应该用,或者更具体一些,Java的String类为什么要设成immutable类型?

不可变对象,顾名思义就是创建后不可以改变的对象,典型的例子就是Java中的String类,

String s = "ABC";s.toLowerCase();

.toLowerCase()并没有改变“ABC”的值,而是创建了一个新的String类”abc”,然后将新的实例的指向变量s。

相对于可变对象,不可变对象有很多优势。

1)不可变对象可以提高String Pool的效率和安全性。如果你知道一个对象是不可变的,那么需要拷贝这个对象的内容时,就不用复制它的本身而只是复制它的地址,复制地址(通常一个指针的大小)需要很小的内存效率也很高。对于同时引用这个“ABC”的其他变量也不会造成影响。 2)不可变对象对于多线程是安全的,因为在多线程同时进行的情况下,一个可变对象的值很可能被其他进程改变,这样会造成不可预期的结果,而使用不可变对象就可以避免这种情况。

当然也有其他方面原因,但是最Java把String设成immutable最大的原因应该就是效率和安全的。

 

转载于:https://my.oschina.net/hanruikai/blog/158029

你可能感兴趣的文章
流水线上的思考——异步程序开发模型(1)
查看>>
为SharePoint网站创建自定义导航菜单
查看>>
分布式系统的Raft算法——在失联阶段这个老Leader的任何更新都不能算commit,都回滚,接受新的Leader的新的更新 意味着还是可能丢数据!!!...
查看>>
检查点(Checkpoint)过程如何处理未提交的事务
查看>>
iphone开发中的手势操作:Multiple Taps
查看>>
牛刀小试Oracle之FRA学习
查看>>
Azure SQL Database (21) 将整张表都迁移到Azure Stretch Database里
查看>>
jquery autocomplete实现读取sql数据库自动补全TextBox
查看>>
前端构建工具gulp入门教程(share)
查看>>
springmvc原理
查看>>
详细说说ActionScript中function的call()方法和apply()方法
查看>>
Oracle Database Administrator验证模式
查看>>
懒人代码-顶部栏
查看>>
elasticsearch best_fields most_fields cross_fields从内在实现看区别——本质就是前两者是以field为中心,后者是词条为中心...
查看>>
Ngxtop-Nginx日志实时分析利器
查看>>
android:设置布局参数LayoutParams
查看>>
用Swift实现一款天气预报APP(一)
查看>>
ARM中断向量表与响应流程【转】
查看>>
[Java基础] java多线程关于消费者和生产者
查看>>
17+个ASP.NET MVC扩展点【附源码】
查看>>