Why is immutability important in Java?

What is immutability

Immutability is when you cannot modify an object created.

String variables

Strings in Java are said to be immutable. However, a String variable created can be changed to another variable. What’s up with that?

Say for example you have a variable named name.

String name= “John”;

name=”Jane”;

Behind the scenes, a new object is created. The value of the variable name is changed (dereferenced from John and referenced to Jane). However, the created object “John” is still lying inside the Heap as below.

Assume the above scenario.

String name=”John”;

String person=”John”;

String employee=”John”;

String pools

It has 3 different variables with the same value. If the saving of value “John” takes 4 bytes for allocation, it should take 3 x 4 bytes for the whole about scenario to take place.

But instead, Java uses a mechanism called String pools allowing to achieve the performance efficiency with its most common data type.

This can be proven by using the == operation as follows. This is because the == operation only compares the reference of the variable.

print(name==person); //prints true

print(name==employee); //prints true

print(person==employee); //prints true

new String Object

However, using new String(“John”) to explicitly create a new String object is a different case.

String name=”John”;

String person=”John”;

String employee=”John”;

String cricketer=new String(“John”);

The Object would be created outside the String pool which makes the object not to pass the above if condition.

print(name==cricketer); //prints false

So simply put, Java is able to save space by the following the String pool mechanism.

Lets look at another scenario.

String name=”John”;

String employee=”John”;

name=”Jane”; //referenced from John and referenced to Jane

This is how the memory allocation would look like.

Thread Safety

Say you have a method named as doIt() that is passed the above variable name as a parameter. But meantime you did the above modification (from “John” to “Jane”), this would impact the entire process.

doIt(name){

//some modifications to the object

}

Java has different mechanisms (pass by value(P/V), pass by reference (P/R), immutability) to overcome these kinds of problems (thread safety). But that’s a topic for another day!

Thanks for reading! Until next time. 👋🏽

--

--

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store