String的hashCode可能会返回负数&解决方案

String的hashCode可能会返回负数&解决方案

产生原因:

  • 可以查看String hashCode()的源码,会发现,它使用的是int类型,这个时候如果字符串过长,则会溢出
    public int hashCode() {
        int h = hash;
        if (h == 0 && value.length > 0) {
            char val[] = value;

            for (int i = 0; i < value.length; i++) {
                h = 31 * h + val[i];
            }
            hash = h;
        }
        return h;
    }

解决方案:

  • 不能直接使用abs,abs也可能溢出,例如System.out.println(Math.abs(Integer.MIN_VALUE));输出的是-2147483648
  • 可以使用str.hashCode()&Integer.MAX_VALUE;来保证为正数
posted @ 2022-12-01 22:48  醉生梦死_0423  阅读(783)  评论(0编辑  收藏  举报