if (fieldNames == null || fieldNames.length == 0) return false;
boolean equal = true;
for (int i = 0; i < fieldNames.length; i++) {
String fieldName = fieldNames[i];
Field fldThis = this.record.getField(fieldName);
Field fldOther = other.record.getField(fieldName);
if (fldThis == null || fldOther == null) return false;
if (fldThis.getObject() instanceof BigDecimal && fldOther.getObject() instanceof BigDecimal) { // caso especial BigDecimal
equal &= fldThis.getBigDecimal().compareTo(fldOther.getBigDecimal()) == 0;
} else if (fldThis.getObject() instanceof BigInteger && fldOther.getObject() instanceof BigInteger) { // caso especial BigInteger
equal &= fldThis.getBigInteger().compareTo(fldOther.getBigInteger()) == 0;
} else if (fldThis.getObject() instanceof Date && fldOther.getObject() instanceof Date) {
equal &= fldThis.getDate().equals(fldOther.getDate());
} else { // caso comum
String strThis = fldThis.getString();
String strOther = fldOther.getString();
if (strThis == null && strOther != null) return false;
if (strThis != null && strOther == null) return false;
if (strThis != null && strOther != null) {
equal &= strThis.equals(strOther);
}