String is a final class, and it has public constructors, so from my
point of view, the special situation is the fact that for this type
there is a Constant Pool, so from my point of view, the question is
the other way around, why there is a Constant Pool, and my believe is
that this is actually, an enhancement from performance point of
view(that's when Strings need to be used, or when modifying their
value is not an often need), since two Strings that have the same
value(as a constant) will refer to the same constant in the String
Constants Pool, and will not cause the creation of any new constant,
so i think the shortcut
String str2= "shiv";
is over
String str2 = new String("shiv");
cause it creates one object and one constant versus the second option
that creates two objects and one constant.
But I am also curious whether there actually are cases or reasons to
ever use the 'new' way of creating a String over the 'shortcut' way.On Jun 28, 6:48 am, Shiv Shankar Prajapati <[email protected]> wrote: > Hi Amit, > I checked it that str2 and str5 are not equal. That is the thing > confusing. If we are creating using new keyword it will return different > objects created on heap. But pointing to same String in string pool > (According to book kathy sierra). That is the main question if both > are pointing to same Java object in String pool then why we need this object > in the heap. Is it due to OOP concept ?? > > On 6/28/10, Amit Ahire <[email protected]> wrote: > > > > > > > Hello Shiv, > > > First of all I would like to remind you of this particular thing about > > String class : " A String class is the special and only class where the > > object is instantiated without having to use the 'new' keyword." > > > So if you are creating the instance > > > String str2 = new String("shiv"); > > or > > String str2= "shiv"; > > > Now coming back to what you are asking about, i dont understand why do you > > say this, > > >> If I created object > > > String obj5 = new String("shiv"); > > > Here (obj2==obj5) will return false and (obj5==obj1) will return false. > > > (obj2==obj5) and (obj5==obj1) will return true, wont it?? > > > With regards, > > > Amit > > > On Sun, Jun 27, 2010 at 11:01 PM, Shiv Shankar <[email protected] > > > wrote: > > >> Hi Guys, > >> Again I am here with new question. Have a discussion with my friends > >> and little bit confused about the string pool. > > >> If I am creating a String object using > >> String obj1="shiv"; > >> and > >> String obj2 = new String("shiv"); > >> We know "shiv" will go in string pool. And when multiple objects created > >> like > >> String obj3 = "shiv"; > >> String obj4 = "shiv"; > >> then (obj3==obj4) and (obj1==obj4) will return true because they are > >> pointing to same object. > > >> Now > >> If I created object > >> String obj5 = new String("shiv"); > >> Here (obj2==obj5) will return false and (obj5==obj1) will return false. > > >> It means both object obj2 and obj5 are different. But what about string > >> literal "shiv". Where it will reside in this case. Will it like > > >> obj2 and obj5 are two different objects in Heap but internally they are > >> pointing to same object "shiv" on string pool. > >> Or > >> its like cloning of object with "shiv" string. And having two totally > >> different objects in Heap memory. > > >> What about > >> String x = "shiv"; > >> String y = new String(x); > >> String z = new String (y); > >> Here I think if I called a method on z object it will call same method > >> from y and then method of y will call same method of x and then finally x > >> will call method of String pool "shiv" object. > > >> Correct me where I am wrong. > > >> Thanks > >> Shiv Shankar > > >> -- > >> To post to this group, send email to > >> [email protected] > >> To unsubscribe from this group, send email to > >> [email protected]<javaprogrammingwithpassion%[email protected]> > >> For more options, visit this group at > >>http://groups.google.com/group/javaprogrammingwithpassion?hl=en > > -- > With Regards, > > Shiv Shankar, > Persistent System Ltd.http://sites.google.com/site/mcashivshankar/ -- To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/javaprogrammingwithpassion?hl=en
