StringUtils equals() relies on undefined behavior
-------------------------------------------------

                 Key: LANG-786
                 URL: https://issues.apache.org/jira/browse/LANG-786
             Project: Commons Lang
          Issue Type: Bug
          Components: lang.*
    Affects Versions: 3.0
         Environment: java version "1.7.0_02"
Java(TM) SE Runtime Environment (build 1.7.0_02-b13)
Java HotSpot(TM) 64-Bit Server VM (build 22.0-b10, mixed mode)

Fedora 15 AMD64
            Reporter: Daniel Trebbien


Since the {{java.lang.CharSequence}} class was first introduced in 1.4, the 
JavaDoc block has contained the following note:

{quote}
This interface does not refine the general contracts of the equals and hashCode 
methods. The result of comparing two objects that implement CharSequence is 
therefore, in general, undefined. Each object may be implemented by a different 
class, and there is no guarantee that each class will be capable of testing its 
instances for equality with those of the other.
{quote}

When the signature of the StringUtils equals() method was changed from 
{{equals(String, String)}} to {{equals(CharSequence, CharSequence)}} in 
R920543, the implementation still relied on calling CharSequence#equals(Object) 
even though, in general, the result is undefined.

One example where {{equals(Object)}} returns {{false}} even though, as 
CharSequences, two objects represent equal sequences is when one object is an 
instance of {{javax.lang.model.element.Name}} and the other object is a String.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to