String pool is a memory area within the heap memory area only i.e. it is not any other kind of memory area...
String object when created using double quotes, jvm first check for the string in pool and if the string already exits, then same reference is given to the object and if no string is found in pool then new string is added to the pool and reference of this is given.
In other case, when we create a string object with new operator, then in this case JVM creates a new string object in the Heap itself instead of searching for the string in the pool.
Yeeaah, String subject. To really understand it, use some IDE and a debugger, put a breakpoint and compare different scenarios. It is worth more than any lesson read. EDIT: please use Mission Control too
It is a java performance tool, highly recommend it for You to test and play with it. A lot of tutorials are telling how things work, but I believe it is better to "see" memory address and think for a while why and how it is done internally