Most asked question during your interviews, different between
String s1 = "abc";
Here s1 string is called as Java String Literal which is created in Heap Space and maintained in a shared memory pool, whereas s2 string is regular Java String Object created in Heap memory and has nothing to do with shared memory.
In the above scenario, s1 is literal string and hence if there are same literals available in shared memory pool, then the same is preferred and no new instance is created unlike string s2 since its an object, so everytime you create the same string object, it will always create a new String Object in memory making in less memory efficient. Refer to below diagram to understand in depth.