说我有一个不可变的DecimalNumber类:
public final class DecimalNumber {
public final String str;
public DecimalNumber(String str) { this.str = str; }
public DecimalNumber(DecimalNumber copy) { this(copy.str); }
public boolean isZero() {...}
public DecimalNumber add(DecimalNumber other) {...}
...
}
Run Code Online (Sandbox Code Playgroud)
我决定这样实施add:
public DecimalNumber add(DecimalNumber other) {
if (other.isZero())
return /* the same object */
...
}
Run Code Online (Sandbox Code Playgroud)
我应该返回this(减少内存使用)还是复制对象new DecimalNumber(this)?
我认为简单地返回this应该没问题,但是创建一个新对象是有益还是有理由?或者它是否是首选?
如果一个类是不可变的且最终的,那么您可以返回this。
如果它不是最终的,您就无法确定该this实例确实是不可变的。您实际上可能正在处理添加可变状态的子类。
请注意,只有在以下情况下,类才是真正不可变的:
在您的情况下,满足这两个条件,因为String是一个不可变的类。如果您知道您的类不存在子类,那么您可以(事实上,恕我直言,应该)返回this。为了确保您的类不存在任何子类,您可以将其设置为final.