Sanjaya is referring to the String literal pool.
Consider the statement "String str2 = new String("HELLO");". The
Java compiler sets up every String literal like "HELLO" in your source program in a special memory area called the "String literal pool". If your program used the literal "HELLO" somewhere else, there would still be only one String like this in the pool. The literal "HELLO" is supplied as an argument to the String() constructor and a new object is created at runtime. A reference to that new object is then stored in reference variable str2. So there are two objects, one in the String literal pool and another one in the same heap where all other objects are kept.
Now consider "String str1="HI";". Here, "HI" is in the String literal pool. A reference to "HI" in the pool is stored in str1. No other object is created.