Language
StringBuilder: append は同じインスタンスを変更する
append は新しい StringBuilder を作らず、呼び出し元を更新して同じ参照を返します。
SourceStringBuilders.java
Java 21
package examples.string;
public final class StringBuilders {
private StringBuilders() {}
public static StringBuilder appendLabel(StringBuilder builder, String label) {
return builder.append(label);
}
}TestStringBuildersTest.java
Java 21
package examples.string;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertSame;
import org.junit.jupiter.api.Test;
class StringBuildersTest {
@Test
void StringBuilderのappendは元のインスタンスを変更する() {
var builder = new StringBuilder("Java");
StringBuilders.appendLabel(builder, " 21");
assertEquals("Java 21", builder.toString());
}
@Test
void StringBuilderのappendは同じインスタンスを返す() {
var builder = new StringBuilder();
assertSame(builder, StringBuilders.appendLabel(builder, "Java"));
}
}01Assertion
このテストで確認できること
- append の後に元の StringBuilder の内容が変わる
- append の返却値は呼び出し元と同じ参照である
StringBuilder は可変です。連結結果を別オブジェクトだと考えず、共有している参照の更新として扱います。
OBSERVED RESULT
expected: result == builder → true
actual: builder.toString() → Java 21