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 ??
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...
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!
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.