I believe this is one type of questions
SCJP favoriates. I remember I read something about it before but cannot remember the real words.
In addition to the memory-saving, Java does this for another very good reason. Please remember String object are "immutable", i.e, once you do aString="another string", the aString object is assigned to another String object (creating one if the String pool does not contain the string, or the aString object refers to the exiting String object). Therefore, to maintain a pool of String constants before and after your application is started, will
boost performance by reducing number of objects to be created.
I did a little statistic study on one of the project I was involved before, there were 22,000 String objects created out of about 44,000 objects total.
Of course, it is under the assumption that you init your String objects by constant assignment instead of "new String" statement...