String s1=new String("abcd");
String first = "ab"; String second = "cd"; String interned = first.concat(second).intern();
Most of the strings in a program are dynamically created: by concatenating values, receiving them over a socket, reading them from files or databases, or from the console or a GUI.
Note that your terminology is wrong.
intern() doesn't create a String literal. It adds a String to the pool, and String literals (i.e. Strings appearing literally in the byte-code, like
"abcd"), are stored in the pool, along with explicitly interned Strings.