-1

可能重复:
可变对象与不可变对象

我了解不可变对象与可变对象之间的优缺点,但是当你来设计它时,你如何决定选择哪一个。

我之所以问这个问题是因为如果它是可变的,您可以通过将对象更改回初始状态来重用该对象,因为它是高效且经济的,所以当您处理多步操作时,您可以重用它并且再次。而当您执行多步操作时,不可变对象的性能会被放大,因为它在每一步都会生成一个新对象。<-就记忆而言

这是示例:

   //Mutable
   A a = new A();
   for(int j = 0 ; j < 1000 ; j++){
       a.setP1(j);
       //do something

   }

   //Immutable
   for(int j = 0 ; j < 1000 ; j++){
       A a = new A(j);
       //do something
   }

我知道不可变对象是安全的,不需要同步,简单,并且共享内部,但是除了这些之外还有什么特别的原因吗?我们什么时候应该让我们的类成为最终的(不可变的)?

4

2 回答 2

1

您对可变性的推理基本上是针对对象池与创建。这是使对象可变的糟糕理由,除非出于某些非常特殊的原因,创建它非常昂贵,或者需要严格控制实例的数量(如数据库连接和线程池)。

这是 Java 早期使用的一种技术,但现在不受欢迎。让 VM 和垃圾收集器完成其工作并为其用例设计代码,而忽略这种通常“虚构”的优化。

于 2012-06-07T19:29:10.367 回答
0

我在以下情况下使用不可变对象:

  1. 在多线程环境中工作,不可变对象非常适合线程间通信(消息)
  2. 当对象不保持其成员变量在应用程序的生命周期内不改变的状态时。示例,用户凭据
于 2012-06-07T18:57:38.157 回答