这是输入。
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);
}
这是输出。
data=你好
长度=25
容量=21
地址=5b480cf9
data=大家好
长度=14
容量=30
地址=6f496d9f
大家好,怎么了?
长度=26
容量=42
地址=723279cf
为什么地址不同于其他地址?我想我也一样。我尝试了不同的方法,比如插入,替换,字符,但是地址还是不一样。有人能告诉我为什么吗?。
2条答案
按热度按时间iszxjhcz1#
内部
printBuild()
,你做了一个新的StringBuilder
每一个电话。每次为新生成器打印哈希:你不能合理地期待一个不同的结果。如果希望每次都看到相同的哈希,请删除以下行:
对输入参数进行操作
dataBuild
直接:作为引用传入。详细说明:
System.identityHashCode
生成的结果只有在对象相同时才保证相同(如中所示)==
,不是equals()
). 当然,与任何散列一样,两个不相等的对象可能具有相同的散列,但函数确实尝试减少重叠。正如预期的那样,结果通常基于内存位置,尽管它通常不是内存位置本身。yrefmtwq2#
System#identityHashCode
不返回对象的地址。为给定对象返回与默认方法hashcode()返回的哈希代码相同的哈希代码,无论给定对象的类是否重写hashcode()。空引用的哈希代码为零。
类的每个对象都有不同的哈希代码。因为每次调用
printBuilder
,您将获得不同的哈希代码。注:比较采用
==
退货true
对于具有相等哈希码的引用。输出: