The below link should clarity all your doubts regarding the concept of String Literal and String Object Creation.
http://www.javaranch.com/journal/200409/ScjpTipLine-StringsLiterally.html
When you create a String using a String Literal, the object is created on the heap and the reference to that object is stored in the String Constant Pool. Hereafter, any references to that String literal will not create new object but the reference from the String Constant Pool is returned.
When you create a String object using a new keyword, the object is created on heap but no references are stored in the String Constant Pool.
In your case:
4 objects shall be created on the heap but only the references of the first three objects will be stored in the String Constant Pool.
The object created using the new keyword will not have its reference stored in the String Constant Pool