我必须比较两个类实例的内容:不是完整的,而是某些字段。这些课程不完全相同;这两个类都有不同的成员元素。
示例:
finally
{
reader?.Close(); // reader can be null so cater for it
}
我想比较字符串" a"的值。在Apple中,使用Class p。中的字符串值
比较内容的低效方法是使用getter方法,直到达到感兴趣的值。
在多个字段上多次进行此类比较的有效方法是什么?
答案 0 :(得分:0)
如果你的getter只是返回字段的值,那么它们通常会被 1 内联。如果发生这种情况,那么你认为效率低下的比较方法就会尽可能高效。
(警告:您的问题“气味”过早优化。您是否有确凿的证据证明这些比较确实是性能瓶颈?您是否描述过您的代码?如果没有,那么很有可能你正试图优化无关紧要的东西。那就是浪费精力。)
但是,如果这还不够好,您可以添加一个自定义比较方法,仅测试您感兴趣的字段; e.g。
public boolean myEquals(MyType other) {
return this.field1.equals(other.field1) && this.field2 == other.field2;
}
进一步优化的想法:
this == other
作为短路。但请注意,上述想法只能提高特定用例的平均性能。在其他情况下,他们可以使性能变差。
1 - JIT编译器不会内联调用太大或需要调度的方法;即“虚拟”函数调用,用C ++的说法。