diff --git a/java/external/src/javax/xml/namespace/QName.java b/java/external/src/javax/xml/namespace/QName.java index 5e87f4e..463c100 100644 --- a/java/external/src/javax/xml/namespace/QName.java +++ b/java/external/src/javax/xml/namespace/QName.java @@ -81,6 +81,11 @@ public class QName implements Serializable { *

prefix of this QName.

*/ private final String prefix; + + /** + *

String representation of this QName.

+ */ + private transient String qNameAsString; /** *

QName constructor specifying the Namespace URI @@ -281,14 +286,16 @@ public class QName implements Serializable { * equal to this QName else false */ public final boolean equals(Object objectToTest) { - if (objectToTest == null || !(objectToTest instanceof QName)) { - return false; + // Is this the same object? + if (objectToTest == this) { + return true; } - - QName qName = (QName) objectToTest; - - return namespaceURI.equals(qName.namespaceURI) - && localPart.equals(qName.localPart); + // Is this a QName? + if (objectToTest instanceof QName) { + QName qName = (QName) objectToTest; + return localPart.equals(qName.localPart) && namespaceURI.equals(qName.namespaceURI); + } + return false; } /** @@ -331,11 +338,23 @@ public class QName implements Serializable { * @return String representation of this QName */ public String toString() { - if (namespaceURI.equals(XMLConstants.NULL_NS_URI)) { - return localPart; - } else { - return "{" + namespaceURI + "}" + localPart; + String _qNameAsString = qNameAsString; + if (_qNameAsString == null) { + final int nsLength = namespaceURI.length(); + if (nsLength == 0) { + _qNameAsString = localPart; + } + else { + StringBuffer buffer = new StringBuffer(nsLength + localPart.length() + 2); + buffer.append('{'); + buffer.append(namespaceURI); + buffer.append('}'); + buffer.append(localPart); + _qNameAsString = buffer.toString(); + } + qNameAsString = _qNameAsString; } + return _qNameAsString; } /**