不同的字符串,hashcode可能相同. 先看例子: @Test public void test6(){ System.out.println("ABCDEa123abc".hashCode()); System.out.println("ABCDFB123abc".hashCode()); } 源码:String.class public int hashCode() { int h = hash; if (h == 0 && value.len…
转自:https://blog.csdn.net/fly_grass_fish/article/details/81742794 在Java中有HashCode的说法,以前以为HashCode是唯一的后来看了下String类里面的HashCode方法如下: public int hashCode() { int h = hash; // hash默认值为0 int len = count;// count是字符串的长度 if (h == 0 && len > 0) { int off…
一提到java的String首先想到的应该就是它的不可变性,其原因是因为String类的内部是使用一个private final char value[]的字符数组来存储数据,本身没有相应的set方法,同时String类又是final的,所以该内部数组就与外界隔绝了,唯一的方法就是通过反射破除private的限制,虽然value[]也是final的,我们不可以修改其内部的数据,但是可以修改其引用的指向从而改变String的值. 至于为什么要把String设计成不可变的,首先,究其原因还是因为字符…
声明:这篇博文纯属是最近看源码时闲着没事瞎折腾(好奇心驱动),对实际的应用程序编码我觉得可能没有那么大的帮助,各位亲就当是代码写累了放松放松心情,视为偏门小故事看一看就可以了,别深究. 一.从Object和System谈起 首先是Object类中的hashCode()方法: public native int hashCode(); native修饰的方法.但是根据文档的描述,我们知道这个int类型的hashCode是根据对象的地址转换而来的. 引文: As much as is reasona…