Java不可变对象

概念:

      不可变对象(immutable objects):一旦被创建,它们的状态就不能被改变的Objects,每次对他们的改变都是产生了新的immutable的Objects。JDK本身就自带了immutable类,比如String,Integer以及其他包装类。

      可变对象(mutable Objects):创建后,状态可以被改变的Objects。

遵循原则:

  • immutable对象的状态在创建之后就不能发生改变,任何对它的改变都应该产生一个新的对象。
  • Immutable类的所有的属性都应该是final的。
  • 对象必须被正确的创建,比如:对象引用在对象创建过程中不能泄露(leak)。
  • 对象应该是final的,以此来限制子类继承父类,以避免子类改变了父类的immutable特性。
  • 如果类中包含mutable类对象,那么返回给客户端的时候,返回该对象的一个拷贝,而不是该对象本身(该条可以归为第一条中的一个特例)

优点:

  1. Immutable对象是线程安全的,可以不用被synchronize就在并发环境中共享
  2. Immutable对象简化了程序开发,因为它无需使用额外的锁机制就可以在线程间共享
  3. Immutable对象提高了程序的性能,因为它减少了synchroinzed的使用
  4. Immutable对象是可以被重复使用的,你可以将它们缓存起来重复使用,就像字符串字面量和整型数字一样。你可以使用静态工厂方法来提供类似于valueOf()这样的方法,它可以从缓存中返回一个已经存在的Immutable对象,而不是重新创建一个。

缺点:

 会制造大量垃圾,由于他们不能被重用而且对于它们的使用就是”用“然后”扔“,字符串就是一个典型的例子,它会创造很多的垃圾,给垃圾收集带来很大的麻烦。当然这只是个极端的例子,合理的使用immutable对象会创造很大的价值。

 

实例:

实例部分在工作中碰到的时候再更新。。。。

参考:

http://www.cnblogs.com/binyue/p/4485449.html

 

posted @ 2015-09-14 18:42  五小瓶  阅读(1150)  评论(0编辑  收藏  举报