it is said that if we declare a atring object like String ab="abc"; then the jvm will first check the String constant pool for the existence of some object with value "abc",if it exists it will assign it to ab else a new object is created. but when we use new keyword to make a new object like String ab=new String("abc"); then memory from non-String pool is assigned to the object and a new object is created. QUESTION: what if we use the new keyword but the constant pool already contains a literal entry of "abc". then will the jvm create a new object without checking the pool or not. and to which object will the ref variable ab refer to??
When you create a String object with the "new" keyword, you will always get a new String object that is not in the pool, no matter if there's already a string in the pool with the same contents or not.
You can call intern() on a String object. That method returns a reference to a String object in the following way: If there's a string in the pool with the same content, then it returns the existing string in the pool; if it's not in the pool, then a new string is created in the pool and a reference to that new pooled string is returned. See the API documentation for more information.