diff --git a/src/java/org/apache/commons/lang/builder/EqualsBuilder.java b/src/java/org/apache/commons/lang/builder/EqualsBuilder.java index afd166695..6901c8e5c 100644 --- a/src/java/org/apache/commons/lang/builder/EqualsBuilder.java +++ b/src/java/org/apache/commons/lang/builder/EqualsBuilder.java @@ -377,8 +377,12 @@ public EqualsBuilder append(Object lhs, Object rhs) { } Class lhsClass = lhs.getClass(); if (!lhsClass.isArray()) { - // The simple case, not an array, just test the element - isEquals = lhs.equals(rhs); + if (lhs instanceof java.math.BigDecimal) { + isEquals = (((java.math.BigDecimal)lhs).compareTo(rhs) == 0); + } else { + // The simple case, not an array, just test the element + isEquals = lhs.equals(rhs); + } } else if (lhs.getClass() != rhs.getClass()) { // Here when we compare different dimensions, for example: a boolean[][] to a boolean[] this.setEquals(false); diff --git a/src/test/org/apache/commons/lang/builder/EqualsBuilderTest.java b/src/test/org/apache/commons/lang/builder/EqualsBuilderTest.java index 57c645922..3455561ff 100644 --- a/src/test/org/apache/commons/lang/builder/EqualsBuilderTest.java +++ b/src/test/org/apache/commons/lang/builder/EqualsBuilderTest.java @@ -16,6 +16,7 @@ */ package org.apache.commons.lang.builder; +import java.math.BigDecimal; import java.util.Arrays; import junit.framework.Test; @@ -376,6 +377,14 @@ public void testFloat() { assertTrue(new EqualsBuilder().append(Float.POSITIVE_INFINITY, Float.POSITIVE_INFINITY).isEquals()); } + // https://issues.apache.org/jira/browse/LANG-393 + public void testBigDecimal() { + BigDecimal o1 = new BigDecimal("2.0"); + BigDecimal o2 = new BigDecimal("2.00"); + assertTrue(new EqualsBuilder().append(o1, o1).isEquals()); + assertTrue(new EqualsBuilder().append(o1, o2).isEquals()); + } + public void testAccessors() { EqualsBuilder equalsBuilder = new EqualsBuilder(); assertTrue(equalsBuilder.isEquals());