File APIs for Java Developers
Manipulate DOC, XLS, PPT, PDF and many others from your application.
http://aspose.com/file-tools
The moose likes Beginning Java and the fly likes Why there are different references of the actual String Object and its interned Object Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login
JavaRanch » Java Forums » Java » Beginning Java
Bookmark "Why there are different references of the actual String Object and its interned Object" Watch "Why there are different references of the actual String Object and its interned Object" New topic
Author

Why there are different references of the actual String Object and its interned Object

Amit Kehri
Greenhorn

Joined: Aug 01, 2012
Posts: 2
It is said that intern() of String called on a String Object, first searches the same Object through its equals() in all available references in literal pool, and if not found then puts a reference of that String Object in literal pool , and returns the same reference to calling application.


String heapString = new String("Hello");
String internedString = heapString.intern();
System.out.println(heapString == heapInternedString ? "Same Reference":"Different Reference");

Output comes "Different Reference".

As we know that String constant pool contains references of the Strings Objects allocated in heap not actual String Objects.
Here 'heapString' is on heap , and its reference is put in String literal pool when intern() is called on this. Same reference is returned to internedString. Then why I am getting result as "Different References" ?
Matthew Brown
Bartender

Joined: Apr 06, 2010
Posts: 4490
    
    8

Hi Amit. Welcome to the Ranch!

Amit Kehri wrote: Here 'heapString' is on heap , and its reference is put in String literal pool when intern() is called on this.

A String with that value is put in the pool, but that doesn't change the heapString reference (since you never assign anything new to that). So your comparing a reference in the pool with one that's not in the pool - they're bound to be different.

(I assume the fact that one line refers to internedString and one refers to heapInternedString is a typo).
Winston Gutkowski
Bartender

Joined: Mar 17, 2011
Posts: 8427
    
  23

Amit Kehri wrote:Then why I am getting result as "Different References" ?

Because new String("Hello") (indeed, new String(anything)) will never return you a String from the pool.

If you'd written
String heapString = "Hello";
your result would have been different.

Winston


Isn't it funny how there's always time and money enough to do it WRONG?
Articles by Winston can be found here
Campbell Ritchie
Sheriff

Joined: Oct 13, 2005
Posts: 40052
    
  28
…and welcome to the Ranch
 
I agree. Here's the link: http://aspose.com/file-tools
 
subject: Why there are different references of the actual String Object and its interned Object