Hi Murthy
String a = new String("java") creates a String object. System.out.println(a == b) is false as it does shallow comparison. It compares Objects instead of the content of the object.
The method equals() does deep comparison. It compares the content of the String. Thus,
System.out.println(a.equals(b)) prints true.
As for
String c = "java";
String d = "java";
since there's no "new" used, it does not create a new object instead is pointing to the same string in the string pool. Since it's the same string, == will return true.
I hope this brief explanation helps a bit.
You should do a search here. This topic has been discussed a lot here. I'm sure the explanations provided by the other ranchers are much better.