SSブログ

Flyweightパターン [Java]

@Test
public void pool() {
String author = "Henry David Thoreau";
String authorCopy = "Henry David Thoreau";
assertTrue(author.equals(authorCopy));
assertTrue(author == authorCopy);

StringBuilder builder = new StringBuilder("Henry");
builder.append(" David Thoreau");
assertTrue(author.equals(builder.toString()));
// this assertion fails!
assertTrue(author == builder.toString());
}

1. 2つのStringオブジェクトの内容は同じ
2. 2つのオブジェクトは意味的に等価
3. equals()を呼び出すことによって2つのオブジェクトの等価性を確認
4. == は authorとauthorCopyの参照(アドレス)を比較しています。
5. 2つのオブジェクトはメモリ内でも同じ場所に格納されている!


2 つのStringオブジェクトは別々に生成されているが、
Javaは密かにこれらのオブジェクトを同じ場所に格納して、メモリ空間を節約

コンパイル時にリテラルはリテラルプールに存在抽出可能


nice!(0) 

nice! 0