wood burning stoves 2.0*
The moose likes Java in General and the fly likes Strings pool in Java. Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login

Win a copy of Murach's Java Servlets and JSP this week in the Servlets forum!
JavaRanch » Java Forums » Java » Java in General
Bookmark "Strings pool in Java." Watch "Strings pool in Java." New topic

Strings pool in Java.

Prashant Neginahal
Ranch Hand

Joined: Dec 04, 2002
Posts: 76
Hi Every body,
Case 1:
String str1="Hello";
In above line, String object is created in String pool and 'str1' will get reference to that object.
Case 2:
String str2=new String("Hi");
In another case here, instace is created in program space and 'str2' will get reference to that object.
My question is ,in second case, Will the instace is created in pool also apart from program space?
Thanks, hope i get the answer....
Prashant Neginahal.

--------------<br />Prashant<br />SCJP-91%
Cindy Glass
"The Hood"

Joined: Sep 29, 2000
Posts: 8521
In case one the String Literal will be added to the Constant Pool.
If you do something like:
String str2=new String(args[0]);
the String will be created as an object on the Heap where all the other objects live. If you WANT to force the String object into the constant pool you can do:
In the example that you gave for case 2 you created a String literal and THEN used it to create a String object. Literals are interned for you, so yes this would also be in the String Pool (which is part of the Constant Pool). In real life this is not a good thing to do. Very wasteful.
From the JLS 3.10.5 String Literals
Literal strings within the same class (�8) in the same package (�7) represent references to the same String object (�4.3.1).
Literal strings within different classes in the same package represent references to the same String object.
Literal strings within different classes in different packages likewise represent references to the same String object.
Strings computed by constant expressions (�15.28) are computed at compile time and then treated as if they were literals.
Strings computed at run time are newly created and therefore distinct.
The result of explicitly interning a computed string is the same string as any pre-existing literal string with the same contents.

[ December 10, 2002: Message edited by: Cindy Glass ]

"JavaRanch, where the deer and the Certified play" - David O'Meara
I agree. Here's the link: http://aspose.com/file-tools
subject: Strings pool in Java.
Similar Threads
string comparision problem
comparing Strings
equals() and ==
String class
String difference