Before dealing with String object creation, let us understand how memory is managed when handling String. The memory division is as shown in below image.
String constant pool is a special memory which is used to store string objects.
String Object Creation:
- By new keyword:
The new keyword will create a new String object and the object is placed in heap memory. Every time you use new keyword to create string object, each time JVM creates a new object and allocates memory.
Given below is the code fragment creating a String object using new keyword.
String str1=new String("JAVA");
In the above code fragment a new string object is created and placed in heap memory, the string literal “JAVA” is placed in string constant pool and the variable ‘str’ refers to the memory location of string object.
- By String Literal:
The variable of type string is assigned directly with string literal using double quotes as shown below in the code fragment.
In the above code fragment the “JAVA” is String literal and str2 is variable of type string.
How String Literal way of string creation works?
When you create a string literal like in the above code fragment, the JVM checks the string constant pool and scans for the match of string literal mentioned by you. If the string literal is already present in string constant pool then JVM simply returns the reference to the string literal already present in the string constant pool. If JVM doesn’t find any match for string literal mentioned then it creates a new string instance and places it in string constant pool.