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

String Object Creation

Debi Pany
Greenhorn

Joined: Sep 01, 2006
Posts: 3
I have a Question regarding the String Class

String s = new String("abc")

As per the defintion of invoking a overloaded constructor it create an object in the non pool memory and assigns it to reference variable s.In addition creates one more object abc and keep it in pool. Please correct me if something is incorrect or missed.

Can anybody please explain this in detail ??
manoj r patil
Ranch Hand

Joined: Jun 06, 2002
Posts: 181
any time the compiler sees a string literal, it creates one in the string pool (although it won't create a duplicate if you have "abc" twice)

so, in your example, there are two string-like objects created, one in the pool, and one in 'non-pool' memory. So your understanding is correct.

BOTH objects are immutable.

Note that you can still point your string reference to a NEW string, but the old one stays there unchanged...


love your job and not your company;
...because you never know when your company will stop loving you!
Joanne Neal
Rancher

Joined: Aug 05, 2005
Posts: 3738
    
  16
Actually, no objects are created in the string literal pool. The pool contains only String references.


Joanne
Ernest Friedman-Hill
author and iconoclast
Marshal

Joined: Jul 08, 2003
Posts: 24187
    
  34

Originally posted by Joanne Neal:
Actually, no objects are created in the string literal pool. The pool contains only String references.


Indeed, this is true, although I recently spent some time up to my elbows in the Sun's JVM source, and it turns out that interned Strings objects are moved to a special "permanent generation" subheap, outside of the normal Java heap -- so it's not quite as cut and dried as the traditional party line would have it!


[Jess in Action][AskingGoodQuestions]
Debi Pany
Greenhorn

Joined: Sep 01, 2006
Posts: 3
so Joanne what you meant is only one reference and one object is created.
please explain this in detail.
Joanne Neal
Rancher

Joined: Aug 05, 2005
Posts: 3738
    
  16
Originally posted by Debi Pany:
so Joanne what you meant is only one reference and one object is created.
please explain this in detail.


No. Two objects are created, but they are both created on the heap (but see EFH's post). The String literal pool only contains references to String objects, not the objects themselves.
Srinivas Kalvala
Ranch Hand

Joined: Oct 20, 2005
Posts: 257

Hello,

To maintain String objects, java uses flyweight design pattern.
 
I agree. Here's the link: http://aspose.com/file-tools
 
subject: String Object Creation