StringBuilder和String的地址是怎么变化的
时间: 2024-12-31 08:02:24 浏览: 5
String和StringBuilder在Java中都是用于处理字符串的类,但它们在内存中的地址变化方式有所不同。
1. **String类**:
- String对象是不可变的(immutable)。每次对String对象进行修改操作(如拼接、替换等)时,都会创建一个新的String对象,而原来的String对象保持不变。
- 由于String对象是不可变的,字符串拼接操作会生成新的String对象,因此String对象的地址会发生变化。
```java
String str = "Hello";
System.out.println(System.identityHashCode(str)); // 输出str的哈希码
str += " World";
System.out.println(System.identityHashCode(str)); // 输出新的str的哈希码
```
在上述代码中,`str`对象的哈希码在修改后会发生变化,说明生成了一个新的String对象。
2. **StringBuilder类**:
- StringBuilder对象是可变的(mutable)。每次对StringBuilder对象进行修改操作时,不会创建新的对象,而是直接在原有对象上进行修改。
- 由于StringBuilder对象是可变的,字符串拼接操作不会生成新的对象,因此StringBuilder对象的地址不会发生变化。
```java
StringBuilder sb = new StringBuilder("Hello");
System.out.println(System.identityHashCode(sb)); // 输出sb的哈希码
sb.append(" World");
System.out.println(System.identityHashCode(sb)); // 输出相同的sb的哈希码
```
在上述代码中,`sb`对象的哈希码在修改前后保持不变,说明没有生成新的StringBuilder对象。
总结:
- **String**:不可变对象,修改时会生成新的对象,地址会变化。
- **StringBuilder**:可变对象,修改时不会生成新的对象,地址不会变化。
阅读全文