Tutorial

Why String is Immutable in Java?

Published on August 3, 2022
author

Pankaj

Why String is Immutable in Java?

While we believe that this content benefits our community, we have not yet thoroughly reviewed it. If you have any suggestions for improvements, please let us know by clicking the “report an issue“ button at the bottom of the tutorial.

Why String is immutable in Java is one of the popular interview questions. The string is one of the most used classes in any programming language. We know that String is immutable and final in Java. Java runtime maintains a String pool that makes it a special class.

Why String is immutable in Java?

why string is immutable in Java, why string is immutable and final in java Let’s look at some of the benefits of String immutability, that will help in understanding why String is immutable in Java.

  1. String pool is possible only because String is immutable in Java. This way Java Runtime saves a lot of heap space because different String variables can refer to the same String variable in the pool. If String would not have been immutable, then String interning would not have been possible because if any variable would have changed the value, it would have been reflected in the other variables too.
  2. If String is not immutable then it would cause a severe security threat to the application. For example, database username, password are passed as String to get database connection and in socket programming host and port details passed as String. Since String is immutable, its value can’t be changed otherwise any hacker could change the referenced value to cause security issues in the application.
  3. Since String is immutable, it is safe for multithreading. A single String instance can be shared across different threads. This avoids the use of synchronization for thread safety. Strings are implicitly thread-safe.
  4. Strings are used in java classloader and immutability provides security that correct class is getting loaded by Classloader. For example, think of an instance where you are trying to load java.sql.Connection class but the referenced value is changed to myhacked.Connection class that can do unwanted things to your database.
  5. Since String is immutable, its hashcode is cached at the time of creation and it doesn’t need to be calculated again. This makes it a great candidate for the key in a Map and its processing is faster than other HashMap key objects. This is why String is the most widely used as HashMap keys.

Above are some of the reasons I could think of that shows benefits of String immutability. It’s a great feature of the Java String class and makes it special. Read this post to know how to write your own immutable class.

You can checkout more Java String examples from our GitHub Repository.

Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.

Learn more about our products


About the authors
Default avatar
Pankaj

author

Still looking for an answer?

Ask a questionSearch for more help

Was this helpful?
 
JournalDev
DigitalOcean Employee
DigitalOcean Employee badge
September 13, 2019

Refer the below code : public class StringImmutable_Test_1_0 { public static void main(String args[]){ String s1 = new String(“nilakshi”); String s2 = “harshada”; String s3 = “nilakshi”; s1 = “harshada”; if(s1 == s2) System.out.println(“s1 and s2 has same reference”); else System.out.println(“s1 and s2 doesn’t have same reference”); s1 = new String(“nilakshi”); if(s1 == s3) System.out.println(“s1 and s3 has same reference”); else System.out.println(“s1 and s3 doesn’t have same reference”); } } This gives me output as follows --> s1 and s2 has same reference s1 and s3 doesn’t have same reference Why this is giving me such result although string is immutable ?

- Nilakshi Patil

    JournalDev
    DigitalOcean Employee
    DigitalOcean Employee badge
    April 3, 2019

    String s1=”Hello”; String s2=new String(“Hello”); System.out.println(s1==s2); Will above two strings will be true post Java 7, as string pool moved to Heap area ?

    - Rohit

      JournalDev
      DigitalOcean Employee
      DigitalOcean Employee badge
      January 27, 2019

      I have one question ad String used for security purpose so none can modify secure data…But my question is if we assign new value in already created String then older secured data does not have any reference…Because that occupied by new string…Then how is it secure?

      - Santosh Gupta

        JournalDev
        DigitalOcean Employee
        DigitalOcean Employee badge
        July 10, 2018

        Thats a great point about a `String` object being an excellent key for `HashMap`s. Had never thought about that before…

        - Akshayraj A Kore

          JournalDev
          DigitalOcean Employee
          DigitalOcean Employee badge
          February 7, 2018

          Hi Pankaj, You mentioned that String is immutable because the hashcides are cached during creation. I didn’t get the meaning of it. Could you please explain?

          - Sudha

            JournalDev
            DigitalOcean Employee
            DigitalOcean Employee badge
            August 18, 2017

            Hi Pankaj, One query based on String immutability feature ,what is better to store a password charArray or String ?

            - Sonam Devikar

              JournalDev
              DigitalOcean Employee
              DigitalOcean Employee badge
              January 16, 2015

              String s1 = “ABC”;-- This goes to pool directly String s2 = new String(“ABC”);–according to ur one of answers above , this created 2 objects, 1 in pool and another in heap memory. I am little confused. So when we check as below s1==s2, then it gives false as s2 refrers to heap area. so, what happens to the reference to the pool area as object is created there also.

              - Ankush Raina

                JournalDev
                DigitalOcean Employee
                DigitalOcean Employee badge
                October 15, 2014

                String str=new String(“Hello”); How many objects are created in this case ? String “Hello” passed as argument where is it stored ?

                - Arunda

                  JournalDev
                  DigitalOcean Employee
                  DigitalOcean Employee badge
                  October 11, 2013

                  Whats the use intern() method in String class? String s1=“Hello”; String s2=new String(“Hello”); System.out.println(s1==s2); // this is shows output false s2=s1.intern(); System.out.println(s1==s2); // this gives output true, Can u explain how it works?

                  - siddu

                    Try DigitalOcean for free

                    Click below to sign up and get $200 of credit to try our products over 60 days!

                    Sign up

                    Join the Tech Talk
                    Success! Thank you! Please check your email for further details.

                    Please complete your information!

                    Featured on Community

                    Get our biweekly newsletter

                    Sign up for Infrastructure as a Newsletter.

                    Hollie's Hub for Good

                    Working on improving health and education, reducing inequality, and spurring economic growth? We'd like to help.

                    Become a contributor

                    Get paid to write technical tutorials and select a tech-focused charity to receive a matching donation.

                    Welcome to the developer cloud

                    DigitalOcean makes it simple to launch in the cloud and scale up as you grow — whether you're running one virtual machine or ten thousand.

                    Learn more
                    DigitalOcean Cloud Control Panel