Saturday, January 5, 2013

Use of String's intern() Method in Java

Someone ask me "Do you Know the use of Strings intern() in java ?"

I was confused because I heard of it but never had the opportunity to use it. So I googled it and found something interesting.

As per meaning/method summary given in JAVA API Docs :
intern() Returns a canonical representation for the string object.

So actually what it do??


A pool of String initially empty, is maintained privately by String  class.

When the intern method is invoked, if the pool already contains a string equal to this String object as determined by the equals(Object) method, then the string from the pool is returned.
 Otherwise, this String object is added to the pool and a reference to this String object is returned.

It follows that for any two strings s and t, s.intern() == t.intern() is true if and only if s.equals(t) is true.

An example is given below :

public class InternExample {
 public static void main(String[] args)
   {
       // Create three strings in three different ways.
       String s1 = "Intern Example";
       String s2 = new StringBuffer("Intern").append(" Example").toString();
       String s3 = s2.intern();

       //Compare  strings using == & equals
       System.out.println("s1 == s2? " + (s1 == s2)+" --"+s1.equals(s2));
       System.out.println("s1 == s3? " + (s1 == s3)+" --"+s1.equals(s3));
   }
}


In the above example the object references are compared as well as the value of String objects.
Output is :

s1 == s2? false --true
s1 == s3? true --true