Need reviewer for forward port of 6815768 (File.getXXXSpace) and 6815768 (String.hashCode)

Dmitry Nadezhin dmitry.nadezhin at gmail.com
Fri Feb 26 15:27:32 UTC 2010


On Fri, Feb 26, 2010 at 6:19 PM, Ulf Zibis <Ulf.Zibis at gmx.de> wrote:

> Am 26.02.2010 12:52, schrieb Dmitry Nadezhin:
>
>  I found two alternatives in the link
>> http://mail.openjdk.java.net/pipermail/coin-dev/2009-December/002618.html
>>   The first alternative
>> int equalByHashThreshold = 2;
>>
>> public boolean equals(Object anObject) {
>>   if (this == anObject) {
>>     return true;
>>   }
>>   if (anObject instanceof String) {
>>
>>     String anotherString = (String)anObject;
>>     int n = count;
>>     if (n == anotherString.count&&
>>         (equalByHashThreshold == 0 || --equalByHashThreshold == 0)&&
>>         (anotherString.equalByHashThreshold == 0 ||
>> --anotherString.equalByHashThreshold == 0)&&
>>
>>
>>         hash() == anotherString.hash()) {
>> [snipped]
>>     }
>>   }
>>   return false;
>> }
>>
>> will say that
>> "A".equals("A") == false
>> because body of if statement will not be executed
>>
>
> I don't understand your problem.
> 1. String literals are always interned, so "A" is always identical to "A".
> Therefore the body of the 1st if will return true.
> 2. If the strings are not identical, body of 2nd if will be executed, if
> anObject is instance of String.
>

I'm sorry. The example should be
new String("A").equals("A") == false .
In this case Strings are not identical. The first if wil not return.
The second if will be executed.
The third if will not be executed because
(equalByHashThreshold == 0 || --equalByHashThreshhold == 0)  <=> (2 == 0 ||
1 == 0) <=> false .

  -Dima
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.openjdk.java.net/pipermail/core-libs-dev/attachments/20100226/0ef2971e/attachment.html>


More information about the core-libs-dev mailing list