String Literal Vs String Object

Both expression gives you String object, but there is subtle difference between them. When you use new String( "Hello World!!" ); , it explicitly creates a new and referentially distinct instance of a String object. It is an individual instance of the java.lang.String class. String s="Hello World!!"; may reuse an instance from the string constant pool if one is available (String Pool is a pool of Strings stored in Java heap memory ).

In this example both string literals refer the same object:

String str1 = "Hello World!!"; String str2 = "Hello World!!"; System.out.println(str1 == str2); // true

In the following code, 2 different objects are created and they have different references:

String str3 = new String("Hello World!!"); String str4 = new String("Hello World!!"); System.out.println(str3 == str4); // false
In terms of good coding practice: do not use == to check for String equality, use .equals() instead. In general, you should use the string literal notation when possible. It is easier to read and it gives the compiler a chance to optimize your code.

Java String Class

Java String Class represents character strings. The java.lang.String class provides a lot of methods to work on string. Java String is not a primitive data type like int and long. It is basically an object that represents sequence of char values . It is like an array of characters works same as java string. More about... String Class