What is the concept of String Pool in Java?

Swatee Chand
Edureka
Published in
5 min readAug 1, 2019

--

String Pool in Java — Edureka

Have you heard about the term “String pool in Java?” Well, if no, you have landed at the right place. String Pool in Java is a pool of Strings that is stored in Java Heap Memory. Let us dig a bit deeper and understand this concept of the Java String pool in detail.

The following pointers will be discussed in this article:

  • How to create a String?
  • What is the String pool in Java?
  • How Does String pool work in Java?
  • Flow diagram
  • Java program for String pool

Let’s begin!

First of all, let us understand how exactly is a string object created!

How to create a string?

To create a String object in Java, there are two ways:

  • Using the new operator. For example,
String s1 = new String("Joey");
  • Using a string literal or constant expression. For example,
String s1="Joey"; (string literal) or
String s1="Joe" + "y"; (string constant expression)

Now, what is this String pool that I am talking about and how is the creation of a string in Java related to this. Let me cut down the clutter!

What is String Pool in Java?

String Pool is a storage area in Java heap.

String allocation, like all object allocation, proves to be a costly affair in both the cases of time and memory. The JVM performs some steps while initializing string literals to increase performance and decrease memory overhead. To decrease the number of String objects created in the JVM, the String class keeps a pool of strings.

Each time a string literal is created, the JVM checks the string literal pool first. If the string already exists in the string pool, a reference to the pooled instance returns. If the string does not exist in the pool, a new String object initializes and is placed in the pool.

After learning the concept theoretically, let me tell you how does a String pool work in Java step by step with the help of simple instances!

How Does String pool work in Java?

When you create a new string like this:

String s1 = "Rachel"

JVM automatically checks if the same value exists in the string constant pool or not.

  • if yes, it occupies the already existing value.
  • If no, it creates a new string by itself and adds it to the string pool.

If you want to halt this behavior, create a string using the new operator:

String s1 = new String("Rachel")

Now, if you are willing to add this string to the string literal pool, Java provides you with a method called, intern() method; you can call native intern() method like this:

S1.intern();

Now, I will show you the implementation and working of the string pool through an example.

But before that, a short reminder!

As you know if you’re comparing 2 objects using == operator it compares addresses in the memory.

So we will compare the strings using == to be completely sure that it’s the same object or not.

Now, let’s hop onto our implementation process.

String Pool in Java: Flow Diagram

Now let us grasp what happens here step by step:

  • The class is loaded when JVM is invoked.
  • JVM looks for all the string literals in the program
  • First, it finds the variable s1 which refers to the literal “Apple” and it gets created in the memory
  • A reference for the literal “Apple” is then placed in the string constant pool memory.
  • Then it finds another variable s2 which refers to the same string literal “Mango”.
  • Then it finds another variable s3 which refers to the literal “Apple”
  • Now that JVM has already found a string literal “Apple”, both the variables s1 and s3 will refer to the same object i.e. “Apple”.

Java program for String Pool

public class StringPoolExperiment
{
public static void main(String[] args)
{
String s1 = "Rachel";
String s2 = "Rachel";
String s3 = new String("Rachel");
String s4 = new String("Rachel").intern();
System.out.println(s1 == s2); // true
System.out.println(s1 == s3); // false
System.out.println(s1 == s4); // true
}
}

Output:

True
False
True

In the above example, you can clearly see the usage of string initialization in all the three ways; i.e;

String s1 = "Rachel";
String s2 = "Rachel";
String s3 = new String("Rachel");
String s4 = new String("Rachel").intern();

The internal working of the program perhaps should be clear now.

With this, I have reached towards the end of my blog. I hope the contents elaborated here helped you in widening your knowledge base. We will keep diving into the Java world. Stay tuned!

If you wish to check out more articles on the market’s most trending technologies like Artificial Intelligence, DevOps, Ethical Hacking, then you can refer to Edureka’s official site.

Do look out for other articles in this series which will explain the various other aspects of Java.

1. Object Oriented Programming

2. Inheritance in Java

3. Polymorphism in Java

4. Abstraction in Java

5. Java String

6. Java Array

7. Java Collections

8. Java Threads

9. Introduction to Java Servlets

10. Servlet and JSP Tutorial

11. Exception Handling in Java

12. Advanced Java Tutorial

13. Java Interview Questions

14. Java Programs

15. Kotlin vs Java

16. Dependency Injection Using Spring Boot

17. Comparable in Java

18. Top 10 Java frameworks

19. Java Reflection API

20. Top 30 Patterns in Java

21. Core Java Cheat Sheet

22. Socket Programming In Java

23. Java OOP Cheat Sheet

24. Annotations in Java

25. Library Management System Project in Java

26. Trees in Java

27. Java Tutorial

28. Top Data Structures & Algorithms in Java

29. Java Developer Skills

30. Top 55 Servlet Interview Questions

31. Top Java Projects

32. Java Strings Cheat Sheet

33. Nested Class in Java

34. Java Collections Interview Questions and Answers

35. How to Handle Deadlock in Java?

36. Top 50 Java Collections Interview Questions You Need to Know

37. Java Tutorial

38. What is the difference between C, C++, and Java?

39. Palindrome in Java- How to check a number or string?

40. Top MVC Interview Questions and Answers You Need to Know

41. Top 10 Applications of Java Programming Language

42. Deadlock in Java

43. Square and Square Root in Java

44. Typecasting in Java

45. Operators in Java and its Types

46. Destructor in Java

47. Binary Search in Java

48. MVC Architecture in Java

49. Hibernate Interview Questions And Answers

Originally published at https://www.edureka.co on August 1, 2019.

--

--