Immutable Strings in Java


Introduction

In Java, Strings are immutable, meaning their values cannot be changed once created. This immutability ensures security, thread-safety, and better performance in certain scenarios.

Why Strings Are Immutable

  • Security: Immutability prevents accidental or malicious changes to string data.
  • Thread-Safety: Strings can be shared across multiple threads without synchronization issues.
  • Performance: Reduces memory overhead due to string interning.

1. Demonstrating Immutability

Once a String is created, any operation that modifies its content results in the creation of a new String object.

Example: Immutability of Strings

    public class ImmutableStringExample {
        public static void main(String[] args) {
            // Create a String
            String str = "Hello";
    
            // Try to modify the String
            String newStr = str.concat(" World");
    
            // Display the original and new String
            System.out.println("Original String: " + str); // Output: Hello
            System.out.println("New String: " + newStr);   // Output: Hello World
        }
    }
        

2. Benefits of Immutability

Immutability offers several advantages:

  • Ensures data integrity.
  • Enables safe sharing of strings across threads.
  • Allows string interning to save memory.

3. String Pool and Interning

Java uses a special memory area called the String Pool to store string literals. When a new string literal is created, Java first checks the pool. If the string already exists, it reuses the existing object instead of creating a new one.

Example: String Pool

    public class StringPoolExample {
        public static void main(String[] args) {
            // Create two strings with the same value
            String str1 = "Java";
            String str2 = "Java";
    
            // Compare references
            System.out.println("Are str1 and str2 the same? " + (str1 == str2)); // Output: true
    
            // Create a new String explicitly
            String str3 = new String("Java");
            System.out.println("Are str1 and str3 the same? " + (str1 == str3)); // Output: false
    
            // Use intern to get the string from the pool
            String str4 = str3.intern();
            System.out.println("Are str1 and str4 the same? " + (str1 == str4)); // Output: true
        }
    }
        

4. Common Pitfalls and Tips

  • Using + for string concatenation in loops can create multiple unnecessary objects. Use StringBuilder or StringBuffer instead.
  • Always use intern() when you want to ensure strings are shared from the pool.

Conclusion

Immutable strings in Java offer security, thread-safety, and performance benefits. While immutability may seem restrictive at first, it plays a crucial role in optimizing memory and ensuring program correctness.





Advertisement