@DisplayName("String literal๋ก ์์ฑํ ๋ ๊ฐ์ฒด๋ ๊ฐ์ด ๊ฐ๋ค๋ฉด ๋์ผํ๋ค.")
@Test
void stringLiteral() {
String str1 = "abc";
String str2 = "abc";
assertThat(str1).isSameAs(str2);
}
@DisplayName("new ์ฐ์ฐ์๋ก ์์ฑํ ๋ ๊ฐ์ฒด๋ ๊ฐ์ด ๊ฐ์๋ ๋์ผํ์ง ์๋ค.")
@Test
void stringNew() {
String str1 = new String("abc");
String str2 = new String("abc");
assertThat(str1).isNotSameAs(str2);
}
String literal๋ก ์์ฑํ๋ฉด, JVM Heap ์์ญ ๋ด String Constant Pool์ ์ ์ฅ๋์ด ์ฌ์ฌ์ฉ ๊ฐ๋ฅ
new ์ฐ์ฐ์๋ก ์์ฑํ๋ฉด, ๊ฐ์ ๋ด์ฉ์์๋ ๋ค๋ฅธ ๊ฐ์ฒด์ด๋ฏ๋ก ๊ฐ๊ธฐ Heap ์์ญ์ ์ฐจ์งํ๋ค.
๋ฉ๋ชจ๋ฆฌ ํจ์จ ์, ๊ทธ๋ฆฌ๊ณ ๋ถ๋ณ์ฑ์ ์ ์งํ๋ ค๋ ๊ฒฝ์ฐ์๋ String literal๋ก String ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ๊ฒ์ด ์ข๋ค.
๐ฉ intern()
intern() : equals()ํด์ String ๊ฐ์ฒด๊ฐ String Pool์ ์กด์ฌํ๋ฉด ๊ทธ ๊ฐ์ฒด๋ฅผ ๋ฆฌํดํ๊ณ ,
๊ทธ๋ ์ง ์์ผ๋ฉด, ํธ์ถ๋ String ๊ฐ์ฒด๋ฅผ String Pool์ ์ถ๊ฐํ๊ณ , ์ถ๊ฐ๋ ๊ฐ์ฒด์ reference๋ฅผ ๋ฆฌํดํ๋ค.
@Test
void internString() {
String str = "abc";
String newStr = new String("abc");
assertThat(str).isNotSameAs(newStr);
String internStr = newStr.intern();
assertThat(str).isSameAs(internStr);
}
๋จ์ : String ๊ฐ์ฒด๋ฅผ ํ๋ ๋ง๋ค์ด์ผํจ. equals() ๋ฉ์๋๋ฅผ ์ด์ฉํ์ฌ ๋ฌธ์์ด์ ์ฐพ์ ๋น๊ตํด์ผํ๋ฏ๋ก ์๊ฐ์ด ์์. String constant Pool ์์ญ์ ๋ค์ด๊ฐ์, GC ๋์์ด ๋์ง ๋ชปํจ.
'๐ Web > Spring, JPA' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [Spring] ๊ฐ์ฒด์ ๊ฐ์ด null์ธ ํ๋ ๋ ธ์ถํ์ง ์๋ ๋ฒ (0) | 2023.05.18 |
|---|---|
| [JPA] @Embeddable๋ฅผ ์ด์ฉํ ๋ณตํฉํค ์ค์ (0) | 2023.03.03 |
| [Spring] CORS ์ค์ (0) | 2022.07.21 |
| [JPA] @Entity, @Table, @Id, @GeneratedValue ์ด๋ ธํ ์ด์ (0) | 2022.07.20 |
| [Spring] AOP ์ฌ์ฉ ์์ - AOP class ๊ตฌํ (0) | 2022.03.24 |