是否真的缓存了java.lang.String的哈希码?

 michaelma423 发布于 2023-02-05 10:18

A String意味着不可改变.因此,没有必要重新计算哈希码.它在内部缓存在一个名为hashtype 的字段中int.

String#hashCode() 实现为(Oracle JDK7)

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;
}

其中hash最初具有的值0.它只会在第一次调用方法时计算出来.

正如评论中所述,使用反射会破坏对象的不变性.

1 个回答
  • A String意味着不可改变.因此,没有必要重新计算哈希码.它在内部缓存在一个名为hashtype 的字段中int.

    String#hashCode() 实现为(Oracle JDK7)

    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;
    }
    

    其中hash最初具有的值0.它只会在第一次调用方法时计算出来.

    正如评论中所述,使用反射会破坏对象的不变性.

    2023-02-05 10:20 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有