String Literal(리ν°λ΄)μ μ μ₯νλ μλ° heap λ©λͺ¨λ¦¬ μμμ μμΉν μ μ₯ 곡κ°.
π String κ°μ²΄ μμ±λ²
μλ°μμλ Stringμ μμ±νλ λ κ°μ§ λ°©λ²μ΄μλ€.
1. String Literal : μ£Όλ‘ μκ³ μλ ""(μ λ°μ΄ν)λ₯Ό μ¬μ©νμ¬ μμ±νλ κ²μ΄λ€.String str1 = "Python"; String str2 = "Java"; String str3 = "Programming";
- new μ°μ°μ : new μ°μ°μλ₯Ό μ¬μ©νμ¬ μμ±νλ κ²μ΄λ€.
String str1 = new String ("Python"); String str2 = new String ("Java"); String str3 = new String ("Programming");
π String Pool μ΄λ?
μ μμ μ νμλ―μ΄, String Pool λλ, String Constant Pool μ΄λ, String Literal λ°©μμΌλ‘ μμ±λ String κ°μ²΄λ€μ΄ μ μ₯λλ μ μ₯ 곡κ°μ΄λ€. λν, μ΄ μ μ₯곡κ°μ JVMμ Heap λ©λͺ¨λ¦¬ μμμ μμΉν΄ μλ€. String ν΄λμ€κ° κ΄λ¦¬νλ€.
κ·Έλ¦Όμ 보면 μ μ΄λ 3κ°μ§λ₯Ό μ μ μλ€.
1. String Literal μ String Pool μμ μ μ₯ λλ€.
2. μλ‘μ΄ String Literalμ κ°μ΄ μ΄λ―Έ String Poolμ μ‘΄μ¬νλ€λ©΄, κ·Έ κ°μ²΄μ κ°μ μλ‘κ² μ μ₯λμ§ μλλ°. κ·Έλ¦¬κ³ κ·Έ κ°μ²΄λ String Poolμ referenceλ₯Ό μ°Έμ‘°νλ€. (κ·Έλ¦Όμμ s1κ³Ό s2κ° κ°μ κ³³μ κ°λ¦¬ν€κ³ μλ κ²λ μ΄ λλ¬Έμ΄λ€).
3. κ·Έμ λΉν΄, new μ°μ°μλ‘ μμ±λ String κ°μ²΄λ κ·Έ κ°μ΄ μ΄λ―Έ String poolμ μ‘΄μ¬νλλΌλ, String Pool λ°, Heap μμμ λ³λλ‘ μ μ₯λλ€.κ·ΈλΌ μ°λ¦¬κ° μ μ μλ μ μ, String κ°μ²΄λ₯Ό String Literal λ°©λ²μΌλ‘ μμ±ν΄μΌ Heap λ©λͺ¨λ¦¬ μμμ λ ν¨μ¨μ μΌλ‘ μ¬μ©νλ€λ κ²μ΄λ€.
π» μμ
μ½λλ‘ μ€νν΄λ³΄μλ€.
public class test { public static void main(String[] args) { String str1 = "Java"; String str2 = "Programming"; String str3 = "Java"; String[] strArray = {"Java", "Programming"}; String str4 = new String("Java"); String str5 = new String("Programming"); String str6 = new String("Java"); //μΆλ ₯ System.out.println("str1 == str3? : " + (str1==str3)); System.out.println("str1 == strArray[0]? : " + (str1==strArray[0])); System.out.println("str2 == strArray[1]? : " + (str2==strArray[1])); System.out.println("str1 == str4? : " + (str1==str4)); System.out.println("str2 == str5? : " + (str2==str5)); System.out.println("str4 == str6? : " + (str4==str6)); System.out.println("str1.equals(str3)? : " + str1.equals(str3)); System.out.println("str1.equals(str4)? : " + str1.equals(str4)); System.out.println("str2.equals(str5)? : " + str2.equals(str5)); System.out.println("str4.equals(str6)? : " + str4.equals(str6)); } } //κ²°κ³Ό str1 == str3? : true str1 == strArray[0]? : true str2 == strArray[1]? : true str1 == str4? : false str2 == str5? : false str4 == str6? : false str1.equals(str3)? : true str1.equals(str4)? : true str2.equals(str5)? : true str4.equals(str6)? : true
- 보μ΄λ κ²κ³Ό String Literalλ‘ μμ±λ String κ°μ²΄λ€μ λΉκ΅ μ°μ°μ ( == ) λ‘ λΉκ΅νμμ λ Trueλ₯Ό λ°ννμλ€. μ΄ μ΄μ λ String Literal κ°μ²΄λ€μ κ°μ΄ κ°μ κ²½μ°, κ·Έ κ°μ μ μ₯ νκ³ μλ String Poolμ Referenceλ₯Ό μ°Έμ‘°νκ³ (String Pool λ΄ ν΄λΉ κ°μ μ£Όμ κ°μ κ°μ§κ³ ) μκΈ° λλ¬Έμ΄λ€.
- λν, new μ°μ°λ‘ μμ±λ κ°μ²΄μ λΉκ΅ νμμλλ falseλ₯Ό λ°ννμλ€. μμμ λ§νλ―μ΄ new μ°μ°μλ‘ μμ±λ κ°μ²΄λ String Poolμ΄ μλ, Heap λ©λͺ¨λ¦¬ μμμ μ μ₯λκΈ° λλ¬Έμ΄λ€.
μ΄λ‘ String Pool μ΄ μ μμ μΌλ‘ μλ λκ³ μλ€λ κ²μ μ μ μλ€.- κ·Έλ¦¬κ³ String [] λ°°μ΄μ λ΄κ²¨μλ κ°μ΄λΌλ Literal νμμΌλ‘ μμ±λκ³ κ°μ κ°μ κ°μ§κ³ μλ€λ©΄ κΈ°λ³Έ String literal λ³μμ λΉκ΅ νμμ λ True κ°μ λ°ν νλ€λ κ²μ μ μ μλ€.
- λ³λλ‘, λ κ°μ²΄κ° λ€λ₯Έ λ°©λ²μΌλ‘ μμ±λμ΄λ κ°μ΄ κ°λ€λ©΄ .equals() λ©μλλ₯Ό μ¬μ©νμ¬ True κ°μ λ°νν μ μλ€. κ·Έ μ΄μ λ, .equals()λ©μλλ μ€μ κ°μ λΉκ΅ νκΈ° λλ¬Έμ΄λ€.
π String.intern() λ©μλ
μ΄ λ©μλλ νΈμΆν String κ°μ²΄μ κ°μ΄ κ°μ (.equals) String κ°μ²΄μ κ°μ΄ μ΄λ―Έ String Pool μμ μ‘΄μ¬ν κ²½μ°, κ·Έ κ°μ²΄λ₯Ό κ·Έλλ‘ λ¦¬ν΄νλ€. κ·Έλ μ§ μλ€λ©΄, νΈμΆλ String κ°μ²΄μ κ°μ String Poolμ μΆκ°νκ³ κ°μ²΄μ referenceλ₯Ό 리ν΄νλ€.
μμpublic class test { public static void main(String[] args) { //μμ 1 : String Pool μμ μ΄λ―Έ κ°μ΄ κ°μ κ°μ²΄κ° μλ κ²½μ° String str1 = "Java"; String str2 = new String("Java"); //μΆλ ₯ 1 System.out.println("str1 == str2? : " + (str1==str2)); System.out.println("str1.equals(str2)? : " + (str1.equals(str2))); str2 = str2.intern(); System.out.println("str1 == str2? : " + (str1==str2)); //μμ 2 : String Pool μμ κ°μ΄ κ°μ κ°μ²΄κ° μλ κ²½μ° String str3 = new String ("Programming").intern(); String str4 = "Programming"; //μΆλ ₯ 2 System.out.println("str3 == str4? : " + (str3==str4)); } } //κ²°κ³Ό //μμ 1 str1 == str2? : false str1.equals(str2)? : true str1 == str2? : true //μμ 2 str3 == str4? : true
π μ€λ λλ μ νμ€ μμ½
"String Pool" πββοΈ
μΆμ²:
μΆμ²1
μΆμ²2
μΆμ²3
μΆμ²4
20230412 TIL