一位面试官问我让类不可变的缺点。关于不可变对象占用的堆空间以及它如何降低 Java 应用程序的性能,我给出了一个答案。
在 Java 中使对象不可变还有哪些其他缺点?
一位面试官问我让类不可变的缺点。关于不可变对象占用的堆空间以及它如何降低 Java 应用程序的性能,我给出了一个答案。
在 Java 中使对象不可变还有哪些其他缺点?
缺点是你必须创建一个新对象来改变它的“值”。如果你的类代表经常“改变”的东西,你会创建很多对象,给垃圾收集器增加负载。
您还应该考虑反序列化/物化不可变对象可能要困难得多,因为它通常涉及编写一个没有无参数构造函数的类。
让我们拿一个 BigInteger
BigInteger i1 = BigInteger.valueOf(1);
它有 add 方法,但你不能给它加 1,它是不可变的,所以你要做的是
BigInteger i2 = i1.add(i1);
即每次都创建一个新对象,即不可变BigInteger的算术运算非常慢
如果没有应用程序要求您的对象是可变的,那么将其设置为不可变并没有什么缺点,您应该这样做。
如果有应用程序要求您的对象是可变的,则使其可变。