Index: src/main/java/java/math/BigInteger.java =================================================================== --- src/main/java/java/math/BigInteger.java (revision 501392) +++ src/main/java/java/math/BigInteger.java (working copy) @@ -547,7 +547,24 @@ /** @ar.org.fitc.spec_ref */ @Override public boolean equals(Object x) { - return ((x instanceof BigInteger) && (compareTo((BigInteger) x) == EQUALS)); + if (this == x) { + return true; + } + if (x instanceof BigInteger) { + BigInteger x1 = (BigInteger)x; + return sign == x1.sign + && numberLength == x1.numberLength + && equalsArrays(x1.digits); + } + return false; + } + + boolean equalsArrays(final int[] b) { + int i; + for (i = numberLength - 1; (i >= 0) && (digits[i] == b[i]); i--) { + ; + } + return i < 0; } /** @ar.org.fitc.spec_ref */ Index: src/main/java/java/math/BigDecimal.java =================================================================== --- src/main/java/java/math/BigDecimal.java (revision 501392) +++ src/main/java/java/math/BigDecimal.java (working copy) @@ -1346,15 +1346,20 @@ /** @ar.org.fitc.spec_ref */ @Override - public boolean equals(Object x) { - return ((x instanceof BigDecimal) - && (((BigDecimal)x).scale == scale) - && (((BigDecimal)x).bitLength == bitLength) - && (bitLength < 64 ? - (((BigDecimal)x).smallValue == smallValue) - : (((BigDecimal)x).getUnscaledValue().equals(getUnscaledValue()))) - ); - } + public boolean equals(Object x) { + if (this == x) { + return true; + } + if (x instanceof BigDecimal) { + BigDecimal x1 = (BigDecimal) x; + return x1.scale == scale + && (bitLength < 64 ? (x1.smallValue == smallValue) + : intVal.equals(x1.intVal)); + + + } + return false; + } /** @ar.org.fitc.spec_ref */ public BigDecimal min(BigDecimal val) {