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