【发布时间】:2020-12-09 14:22:44
【问题描述】:
这是输入。
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);
}
这是输出。
- 数据 = 你好
- 长度 = 25
- 容量 = 21
- 地址 = 5b480cf9
- 数据 = 大家好
- 长度 = 14
- 容量 = 30
- 地址 = 6f496d9f
- data = 大家好,最近怎么样?
- 长度 = 26
- 容量 = 42
- 地址 = 723279cf
为什么地址与其他地址不同? 我虽然会是一样的。我尝试了不同的方法,如插入、替换、charAt,但地址仍然不同。谁能告诉我为什么?
【问题讨论】:
-
是的。哈希码更改的原因是您每次调用它时都会在
printBuilder中显式创建一个新的StringBuilder。仔细查看您的代码。 -
一个澄清:
hashCode不是一个对象的地址。默认实现(如果类没有覆盖方法)可能基于地址或其他因素,但仅此而已。 -
我还是一样你能解释一下你为什么这么认为吗?
标签: java stringbuilder hashcode