Hi Vitaly,

I can buy that argument. It wasn't hard for me to recognize it when I saw
it in real world.

But apparently whoever asked me about it couldn't wrap his head around it
to understand why...

Maybe it's a case for a Pitfalls book instead of for JavaDocs.

Thanks,
Kris

On Friday, July 17, 2015, Vitaly Davidovich <vita...@gmail.com
<javascript:_e(%7B%7D,'cvml','vita...@gmail.com');>> wrote:

> IMHO, this doesn't warrant any special wording -- if someone hits this, I
> think it's fairly evident what the issue is.  You can get the same problem
> with adding an ArrayList to itself and calling hashCode().
>
> On Fri, Jul 17, 2015 at 2:45 PM, Krystal Mok <rednaxel...@gmail.com>
> wrote:
>
>> Hi everyone,
>>
>> I'm sure somebody has seen this stack overflow before. My question is: is
>> it expected (which should be documented to warn people not to do this), or
>> is it considered a bug (which should be fixed)?
>>
>> Example:
>> https://gist.github.com/rednaxelafx/930f8979473185cfc0a0
>>
>> import java.util.*;
>>
>> public class HashMapStackOverflow {
>>   public static void main(String[] args) throws Exception {
>>     HashMap<String, Object> map = new HashMap<>();
>>     map.put("self", map);
>>     System.out.println(map.hashCode());
>>   }
>> }
>>
>> $ ~/sdk/jdk1.8.0/Contents/Home/bin/java HashMapStackOverflow
>> Exception in thread "main" java.lang.StackOverflowError
>> at java.util.AbstractMap.hashCode(AbstractMap.java:505)
>> at java.util.Objects.hashCode(Objects.java:98)
>> at java.util.HashMap$Node.hashCode(HashMap.java:296)
>> at java.util.AbstractMap.hashCode(AbstractMap.java:507)
>> at java.util.Objects.hashCode(Objects.java:98)
>> at java.util.HashMap$Node.hashCode(HashMap.java:296)
>> at java.util.AbstractMap.hashCode(AbstractMap.java:507)
>> at java.util.Objects.hashCode(Objects.java:98)
>> at java.util.HashMap$Node.hashCode(HashMap.java:296)
>> at java.util.AbstractMap.hashCode(AbstractMap.java:507)
>> ...
>>
>> This will cause a stack overflow because HashMap.hashCode() is inherited
>> from AbstractMap, which sums the hash code of each entry, while one of the
>> entries is itself so it goes recursive.
>>
>> Thanks,
>> Kris
>>
>
>

Reply via email to