为了账号安全,请及时绑定邮箱和手机立即绑定

java面试冷知识 String的线程安全和hashcode

标签:
Java
线程安全性

        说道有关string的线程安全性,大家想到的肯定时stringbuffer和stringbuilder。现在问一句string的大家就可能突然发蒙。

        首先string是线程安全的,很多人给了一个啼笑皆非的原因,因为string类是final的……这个final的作用也就是不能继承,和线程安全性貌似没有关系。主要原因是string内部存储字符串的char数组以及和char数组相关的信息都是final的,这就保证了string对象生成的那一刻他在内存里就是不可变的。

hashcode

        很多人说自己看过java源码,估计这个是个盲点,知道了感觉确实用处不大,不过见还真有人问,这里就简述一下。

        他的主要算法就是

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

代码并不难,用数学公式推导一下就是:

   hashcode =  s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1];
点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
JAVA开发工程师
手记
粉丝
1.6万
获赞与收藏
380

关注作者,订阅最新文章

阅读免费教程

  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消