最流行的Java面试题之一就是:什么是不可变对象(immutable object),不可变对象有什么好处,在什么情况下应该用,或者更具体一些,Java的String类为什么要设成immutable类型?
不可变对象,顾名思义就是创建后不可以改变的对象,典型的例子就是Java中的String类。
String s = "ABC"; s.toLowerCase();
如上s.toLowerCase()并没有改变“ABC“的值,而是创建了一个新的String类“abc”,然后将新的实例的指向变量s。
相对于可变对象,不可变对象有很多优势:
1).不可变对象可以提高String Pool的效率和安全性。如果你知道一个对象是不可变的,那么需要拷贝这个对象的内容时,就不用复制它的本身而只是复制它的地址,复制地址(通常一个指针的大小)需要很小的内存效率也很高。对于同时引用这个“ABC”的其他变量也不会造成影响。
2).不可变对象对于多线程是安全的,因为在多线程同时进行的情况下,一个可变对象的值很可能被其他进程改变,这样会造成不可预期的结果,而使用不可变对象就可以避免这种情况。
当然也有其他方面原因,但是Java把String设成immutable最大的原因应该是效率和安全。
相关推荐
主要介绍了JAVA不可变类(immutable)机制与String的不可变性(推荐)的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
流行的Java面试题之一是:什么是不可变对象(immutable object),不可变对象有什么好处,在什么情况下应该用,或者更具体一些,Java的String类为什么要设成immutable类型? 不可变对象,顾名思义是创建后不可以...
主要介绍了Java进阶教程之String类,String类对象是不可变对象(immutable object),String类是唯一一个不需要new关键字来创建对象的类,需要的朋友可以参考下
至于为什么要把String类设计成不可变类,是它的用途决定的。其实不只String,很多Java标准类库中的类都是不可变的。在开发一个系统的时候,我们有时候也需要设计不可变类,来传递一组相关的值,这也是面向对象思想...
至于为什么要把String类设计成不可变类,是它的用途决定的。其实不只String,很多Java标准类库中的类都是不可变的。在开发一个系统的时候,我们有时候也需要设计不可变类,来传递一组相关的值,这也是面向对象思想的...
中包含了很多不可变类,包括String、装箱的原始类、BigInteger 等。基本上不可变类是不太容易出错的。 请使用以下 api 实现不可变队列: Scala版本: trait Queue [ T ] { def isEmpty : Boolean def enQueue ( t : ...
實踐63:審慎㆞定義和實現immutable classes(不可變類) 213 實踐64:欲傳遞或接收mutable objects(可變對象)之object references 時,請實施clone() 215 實踐65:使用繼承(inheritance)或委託(delegation)來...
标准类中Immutable类:String、BigInteger、BigDecimal、Pattern、基本类型的包装类 java.util.ArrayList非线程安全的类,可用Collections.synchronizedList()进行包装 List list = Collections.synchronizedList...
不可变对象是在完全创建后其内部状态保持不变的对象。 这意味着不可变对象的公共 API 向我们保证它在其生命周期内将以相同的方式运行。 可变性(可以改变)的一个例子是: String name = " i love cs2030? " ; ...
Immutable collections(不变的集合): 防御性编程, 不可修改的集合,并且提高了效率。 2. New collection types(新集合类型):JDK collections 没有的一些集合类型,主要有:multisets,multimaps,tables, ...
阅读完整的文档,为 // Define abstract value type using interface, abstract class or annotation@Value . Immutablepublic interface ValueObject extends WithValueObject { // extend not-yet-generated ...
不可变的Android示例 在Android和GSON上使用小示例。 您还可以按照《 的 使用以下User模型: @Gson.TypeAdapters @Value.Immutable public abstract class User { public abstract int id(); public abstract ...
市场上讲解算法的书已经汗牛充栋,为什么还要写这本书呢?主要原因是我对目前市场上的大部分算法书都不太满意。 本书有如下特色: 背后有强大的AlgoHub支持。 本书的所有题目,都可以在 www.algohub.org(即将上线)...