手记

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

线程安全性

        说道有关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];
0人推荐
随时随地看视频
慕课网APP