--- old/src/java.xml/share/classes/javax/xml/datatype/XMLGregorianCalendar.java 2020-08-07 18:58:55.469682072 +0000 +++ new/src/java.xml/share/classes/javax/xml/datatype/XMLGregorianCalendar.java 2020-08-07 18:58:55.175674611 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2017, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2020, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -28,6 +28,7 @@ import javax.xml.namespace.QName; import java.math.BigDecimal; import java.math.BigInteger; +import java.util.Arrays; import java.util.TimeZone; import java.util.GregorianCalendar; @@ -688,10 +689,12 @@ */ @Override public boolean equals(Object obj) { - if (obj == null || !(obj instanceof XMLGregorianCalendar)) { return false; } + if (obj == this) { + return true; + } return compare((XMLGregorianCalendar) obj) == DatatypeConstants.EQUAL; } @@ -716,12 +719,10 @@ if (timezone != 0) { gc = this.normalize(); } - return gc.getYear() - + gc.getMonth() - + gc.getDay() - + gc.getHour() - + gc.getMinute() - + gc.getSecond(); + + int[] elements = {gc.getYear(), gc.getMonth(), gc.getDay(), gc.getHour(), + gc.getMinute(), gc.getSecond(), gc.getMillisecond()}; + return Arrays.hashCode(elements); } /**