On Thu, 11 Feb 2021 04:24:40 GMT, Stuart Marks <sma...@openjdk.org> wrote:
>> Joe Darcy has updated the pull request incrementally with one additional >> commit since the last revision: >> >> Fix typos in javadoc tags found during review. > > src/java.base/share/classes/java/math/BigDecimal.java line 97: > >> 95: * contrast, the {@link equals equals} method requires both the >> 96: * numerical value and representation to be the same for equality to >> 97: * hold. > > Note, discussing "representation" is ok here since the context is discussing > the representation of BigDecimal (in contrast to the text in Comparable). It might be reasonable to add a bit of rationale here and give an example. I think the reason that members of the same cohort might not be considered `equals()` to one another is that they are not substitutable. For example, consider 2.0 and 2.00. They are members of the same cohort, because new BigDecimal("2.0").compareTo(new BigDecimal("2.00")) == 0 is true. However, new BigDecimal("2.0").equals(new BigDecimal("2.00")) is false. They aren't considered `equals()` because they aren't substitutable, since using them in an arithmetic expression can give different results. For example: new BigDecimal("2.0").divide(new BigDecimal(3), RoundingMode.HALF_UP) ==> 0.7 new BigDecimal("2.00").divide(new BigDecimal(3), RoundingMode.HALF_UP) ==> 0.67 I think that's the right rationale, and a reasonable example to illustrate it. Edit to taste. I think it would be good to have material like this, though, because people's immediate reaction to BD being inconsistent with equals is "well that's wrong." Well, no, it's right, and I think this is the reason. ------------- PR: https://git.openjdk.java.net/jdk/pull/2471