Skip to content

Strings

AnsuDennis edited this page Sep 2, 2020 · 2 revisions

String objects in Java are immutable. Any modifications on the object will create a new String object. The location where the string values are stored in memory depends on how we create them.

Methods concat, replace, toLowerCase, toUpperCase or substring methods will create a new string and return that value.

Approach 1 In the example below we are directly referencing a String literal. String str1 = "value";

This value will be stored in a "String constant pool" – which is inside the Heap memory. If compiler finds a String literal,it checks if it exists in the pool. If it exists, it is reused.

String str5 = "value"; In above example, when str5 is created - the existing value from String Constant Pool is reused.

Approach 2 However, if new operator is used to create string object, the new object is created on the heap. There will not be any reuse of values.

//String Object - created on the heap String str2 = new String("value");

So we should not use new operator while working with String. Also we should be careful about String Concatenation(+) operator in Loops due to the above reason. Instead of String u should use StringBuffer(thread safe) or StringBuilder(not thread safe) which will not create new objects.

Differences between String and StringBuffer • Objects of type String are immutable. StringBuffer is used to represent values that can be modified. • In situations where values are modified a number to times, StringBuffer yields significant performance benefits. • Both String and StringBuffer are thread-safe. • StringBuffer is implemented by using synchronized keyword on all methods.

StringBuilder is not thread safe. So, it performs better in situations where thread safety is not required.

Clone this wiki locally