rio*_*rio 1 java stringbuilder hashcode
这是输入。
public static void main(String[] args){
StringBuilder builder = new StringBuilder("hello");
printBuilder(builder);
// append
builder.append(" everyone");
printBuilder(builder);
builder.append(", what's up?");
printBuilder(builder);
}
private static void printBuilder(StringBuilder dataBuild){
StringBuilder build = new StringBuilder(dataBuild);
System.out.println("data = " + build);
System.out.println("length = " + build.length());
System.out.println("capacity = " + build.capacity());
int addressBuild = System.identityHashCode(build);
System.out.println("address = " + Integer.toHexString(addressBuild);
}
Run Code Online (Sandbox Code Playgroud)
这是输出。
为什么地址与其他地址不同?我虽然会一样。我尝试了不同的插入、替换、charAt,但地址仍然不同。谁能告诉我为什么?
在里面printBuild(),你StringBuilder每次调用都会创建一个新的。每次都会为新构建器打印哈希:
int addressBuild = System.identityHashCode(build);
Run Code Online (Sandbox Code Playgroud)
你不能合理地期待不同的结果。如果您想每次都看到相同的哈希值,请删除以下行:
StringBuilder build = new StringBuilder(dataBuild);
Run Code Online (Sandbox Code Playgroud)
dataBuild直接对输入参数进行操作:它作为引用传入。
详细说明:System.identityHashCode产生的结果只有在对象相同时才保证相同(如在 中==,不在 中equals())。当然,与任何散列一样,两个不相等的对象可能具有相同的散列,但该函数确实尝试减少重叠。正如预期的那样,结果通常基于内存位置,尽管它通常不是内存位置本身。