使Java对象不可变的缺点

时间:2013-03-05 16:57:14

标签: java immutability

一位采访者问我关于使类不可变的缺点。我给出了关于不可变对象占用的堆空间以及它如何降低Java应用程序性能的答案。

在Java中使对象不可变的其他缺点是什么?

4 个答案:

答案 0 :(得分:1)

缺点是您必须创建一个新对象来更改其“值”。如果你的类代表经常“改变”的东西,你将创建大量的对象,将负载放在垃圾收集器上。

答案 1 :(得分:0)

如果没有应用程序要求您的对象是可变的,那么使其不可变是没有缺点的,您应该这样做。

如果有一个应用程序要求你的对象是可变的,那么让它变得可变。

答案 2 :(得分:0)

您还应该考虑反序列化/实现不可变对象可能要困难得多,因为它通常涉及编写没有无参数构造函数的类。

答案 3 :(得分:0)

让我们拿一个BigInteger

BigInteger i1 = BigInteger.valueOf(1);

它有添加方法,但你不能添加1,它是不可变的,所以你做的是

BigInteger i2 = i1.add(i1);

也就是说,每次都会创建一个新对象,即使用不可变BigInteger的算法非常慢